prolog中的算术运算

问题描述 投票:1回答:2

怎么可能按顺序使用7 10 3 2并且不使用括号来获得28?我一直想着过去的1个半小时而我无法到达任何地方。

math prolog puzzle arithmetic-expressions
2个回答
2
投票

只是一步一步地做,改变状态。

step(S,A,X, S2,A2) :-
   (  S = [+ | S2], A2 is A + X
   ;  S = [- | S2], A2 is A - X
   ;  S = [* | S2], A2 is A * X
   ;  S = [/ | S2], A2 is A div X 
   ).

puzzle(S) :- 
   step(S,  7, 10,  S2, A2),
   step(S2, A2, 3,  S3, A3),
   step(S3, A3, 2,  [], 28).

试:

?- puzzle(X).
X = [+,-,*] ;
false.

2
投票

这个答案建立在@WillNess的前一个答案之上,试图让它变得更简单:

x_y_xy(A, B, A + B).
x_y_xy(A, B, A - B).
x_y_xy(A, B, A * B).
x_y_xy(A, B, A div B).

puzzle(C) :- 
   x_y_xy(7, 10, A),
   x_y_xy(A, 3,  B),
   x_y_xy(B, 2,  C).

样品用途:

?- puzzle(Expr), Expr =:= 28.
Expr = (7+10-3)*2 ;
false.
© www.soinside.com 2019 - 2024. All rights reserved.