如何在Prolog中使用append / 3查找列表的最后2个元素

时间:2019-01-19 04:31:47

标签: prolog

使用系统谓词append/3,编写谓词以返回:

  1. 列表的最后一个元素
  2. 列表的最后2个元素
  3. 列表的最后n个元素
  4. 列表的前n个元素。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

append( A, B, C)是什么意思?意思是

 A=[..........]
           B=[.........]
 C=[...................]

做什么

     length( B, 2)

是什么意思?意思是

            B = [X | B1           ],
            length(  B1, 1)

所以,这意味着

            B = [X | B1           ],
                     B1 = [Y | B2],
            length(            B2,  0)
  % i.e.
            B = [X | B1           ],
                     B1 = [Y | B2],
                               B2 = []
  % i.e.
            B = [X | B1           ],
                     B1 = [Y | []]
  % i.e.
            B = [X |      [Y | []]]  = [X | [Y]]
              = [X ,       Y | [] ]
              = [X,        Y      ]

等等

B = [X, Y], append( A, B, C)

表示

 A=[..........]
           B=[XY]
 C=[..........XY]

我认为这很清楚。这意味着我们可以定义

one_before_last(C, X) :-
  % you can finish this up now!

并且我们看到B = [_, _]的意思是length( B, 2)(即,我们反向追踪方程式),我们可以将其他事物用作length的参数。解决您的 other 所述问题。

答案 1 :(得分:1)

最后一个元素:append(_, [X], List)

最后两个元素:append(_, [X, Y], List)

最近n个元素:length(LastN, N), append(_, LastN, List)

前n个元素:length(FirstN, N), append(FirstN, _, List)