0

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

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 说:类型错误。

我怎样才能做到这一点?

4

2 回答 2

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).

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

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

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

于 2011-04-29T13:44:32.613 回答
0

试试这个。

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

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

于 2011-04-29T13:59:20.580 回答