我是 prolog 的新手,我想知道是否有人可以帮助我解决这个问题。问题:给定整数 1,2,3,4,以及谓词 mult/2、div/2、div/2、minus/2、minus/2 和 eval/2,我需要编写一个谓词解决方案/1 ,当这样调用时:
?- solutions(L).
它应该以变量 L 结束,该变量统一为值为 6 的表达式列表。表达式的形式为:
X, Y, exp/2
但是我的代码不起作用。我有两个版本。第一个冻结了 SWI-Prolog,在我输入句号后不返回任何答案,之后也不让我评估其他任何内容:
eval(1,1.0).
eval(2,2.0).
eval(3,3.0).
eval(4,4.0).
eval(mult(X,Y),Z) :-
eval(X,A),
eval(Y,B),
Z is A*B.
eval(div(X,Y),Z) :-
eval(X,A),
eval(Y,B),
Z is A/B.
eval(minus(X,Y),Z) :-
eval(X,A),
eval(Y,B),
Z is A-B.
solutions(L) :-
setof(X,eval(X,6),L),
print(L).
当我键入时,第二个版本只返回 false ?- solutions(L).
:
solutions(L) :-
setof([exp,X,Y],eval(exp(X,Y),6),L),
print(L).
非常感谢您花时间提供帮助!