我是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.
但仍然没有给出结果。
答案 0 :(得分:1)
你几乎是对的。 is
是错误的操作符,您需要=
。此外,与number/1
核对可能更安全。由于[a]
和a(b)
也不是原子,但也不是数字。
这样就变成了:
add(X,H,K):-
number(H)->
K is H+X;
K = H.