如何在Prolog的嵌套列表中追加1个元素?

时间:2011-04-29 12:08:16

标签: list prolog append turbo-prolog

我想在嵌套列表中附加一个列表元素:

predicates  
  append(li,li,li).

clauses 
 append([X|Y],Z,[X|W]):- append(Y,Z,W).
 append([],X,X).  

例如:

append([ [1],[2],[3] ],[4],A)
Solution: A = [ [1],[2],[3],[4] ]

Turbo Prolog说:输入错误。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

问题在于您正在定义域错误,并且您还要附加两个不同的域(带有整数列表的整数列表列表)。

如果你想要的是附加整数列表的列表(从你的例子看来),代码应该是

domains
li = integer*
lili = li*

predicates
  append(lili, lili, lili).

clauses
append([X|Y],Z,[X|W]):- append(Y,Z,W).
append([],X,X).

然后在示例中,第二个列表应该是列表2的列表,产生:

append([ [1],[2],[3] ],[[4]],A).
Solution: A = [ [1],[2],[3],[4] ]

请注意,第二个列表是[[4]]而不是[4]。

答案 1 :(得分:0)

试试这个。

clauses
 append([X|Y],Z,[X|W]):- append(Y,Z,W).
 append([],X,[X]). 

您期望的结果是列表的列表。因此,如果代码进入第二个谓词,它应该形成正确的类型 - 在您的代码中它是简单的参数事务。正确的做法是将其包装到另一个列表中以便稍后填充第一个“参数”中的项目。