我想在嵌套列表中附加一个列表元素:
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说:输入错误。
我该怎么做?
答案 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]).
您期望的结果是列表的列表。因此,如果代码进入第二个谓词,它应该形成正确的类型 - 在您的代码中它是简单的参数事务。正确的做法是将其包装到另一个列表中以便稍后填充第一个“参数”中的项目。