【发布时间】:2015-02-25 19:00:24
【问题描述】:
我是一名计算机科学专业的学生,上学期我们学会了用 Prolog 编程。现在我正试图从中获得乐趣。 我正在尝试构建一个给定符号/数学输入的程序,它会返回结果。 示例:
? solve(2+3+Z+K+5+Z+1, R).
R = 11+2*Z+K or R = 11+Z+K+Z
这是sn-p(用于+操作)
solve(X, R) :-
eval(X, R).
eval(X, X) :- var(X),!.
eval(X, X) :- number(X), !.
eval(+(X, Y), R) :-
eval(X, A),
eval(Y, B),
add(A, B, R), !.
add(A, B, R) :-
number(A),
number(B),
!,
R is A + B.
add(A, B, A+B) :-
var(A); var(B),!.
add(A+X, B, R+X) :-
number(A),
number(B),
var(X),
!,
R is A + B.
add(X+A, B, R+X) :-
number(A),
number(B),
var(X),
!,
R is A + B.
当数字被许多变量分隔时,我遇到了一些问题,例如:
? solve(5+Z+5+4+K+Z+6, R).
FALSE.
或者,(不是上面的源代码),如果数字被许多变量分隔,它们不会被“处理”,例如:
? solve(5+Z+K+7, R).
R = 5+Z+K+7.
感谢您的帮助,任何建议或参考将不胜感激。
【问题讨论】:
-
您可能想查看this question/answer 的一些想法。