【发布时间】:2017-09-22 13:52:56
【问题描述】:
编程界的好人你好。
与命令式编程相比,逻辑编程总是令人着迷。 由于追求逻辑编程的未知性,在遇到算术表达式时存在一些问题。
这是我到目前为止所做的代码。
number_atom(N) :-
(number(N) -> functor(N, _, _); functor(N, _, _), atom(N)).
arithmeticAdd_expression(V,V,Val,Val).
arithmeticAdd_expression(N, _Var, _Val, N) :-
number_atom(N).
arithmeticAdd_expression(X+Y, Var, Val, R) :-
arithmeticAdd_expression(X, Var, Val, RX),
arithmeticAdd_expression(Y, Var, Val, RY),
(number(RX), number(RY) -> R is RX + RY; R = RX + RY).
以添加操作为例:
arithmeticAdd_expression(Expression, Variable, Value, Result)
?- arithmeticAdd_expression(a+10, a, 1, Result).
?- Result = 11;
?- Result = a + 10.
?- arithmeticAdd_expression(a+10, b, 1, Result).
?- Result = a + 10.
我想要实现的是 如果表达式中的原子只能由给定的变量和值替换,则结果只是上面显示的示例(结果 = 11)的数字。否则,结果只是表达式本身。我的代码问题出在某个地方,我可以弄清楚。那么,请有人可以帮助我吗?谢谢。
【问题讨论】:
-
你可以在这里删减:
(number(RX), number(RY) -> !, R is RX + RY; R = RX + RY)。另外,我认为number_atom/1可以简化为number_atom(N) :- number(N) ; atom(N). -
感谢您提供快速响应的解决方案,干杯..:P