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

在prolog中为列表的每个元素添加一个no,prolog,Prolog,我不熟悉Prolog。我想写一个三元谓词来添加 第一个参数是数字,第二个参数是列表。第三个参数将保存结果 e、 g 我编写了以下代码: 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. 但

我不熟悉Prolog。我想写一个三元谓词来添加 第一个参数是数字,第二个参数是列表。第三个参数将保存结果

e、 g

我编写了以下代码:

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.

但它仍然没有给出结果。

你几乎是对的
是错误的运算符,您需要
=
。此外,使用
number/1
进行检查可能会更省钱。因为
[a]
a(b)
也不是原子,但也不是数字

这样它就变成:

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

格式化确实提高了获得响应的机会。
add(X,H,K):- 
  number(H)->
  K is H+X;
  K = H.