在prolog中为列表的每个元素添加一个no

时间:2014-10-11 21:25:54

标签: prolog

我是Prolog的新手。我想写一个创建一个三元谓词,它将添加 第一个参数,一个数字,第二个参数中的每个数字,一个列表。第三个参数将保存结果。

e.g。

?-addparam1(4,[a,3,6,b,8],X).
X=[a,7,10,b,12]

我写了以下代码:

test(X , [] ,[] ).
test(X , [H|T] ,[A|B]) :- add(X,H,A),test(X,T,B).

add(X,H,K):-K  is H +X.

如果我只列出列表中的数字而不是字母表,那么它可以正常工作。我尝试使用if语句

add(X,H,K):- atom(H)->K  is H ; K  is H +X.

但仍然没有给出结果。

1 个答案:

答案 0 :(得分:1)

你几乎是对的。 is是错误的操作符,您需要=。此外,与number/1核对可能更安全。由于[a]a(b)也不是原子,但也不是数字。

这样就变成了:

add(X,H,K):- 
  number(H)->
  K is H+X;
  K = H.