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



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

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说:Type Error.

我该怎么做?

问题是您定义了错误的域,并且您还附加了两个不同的域(整数列表的列表与整数列表的列表)。

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

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]。

试试这个

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

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

相关内容

  • 没有找到相关文章

最新更新