我与PROLOG一起工作了两个星期,我无法解决以下问题:
定义u/3,它从数字列表中识别出可能的最佳算术项及其结果的最大值。示例:
?- u([18,0.25,3,4],Max,Term).
Max = 300.0,
Term = (18/0.25- -3)*4 ;
false.
我可以用它来解决这个问题:
split(List,Left,Right) :-
append(Left,Right,List),
Left = [_|_],
Right = [_|_].
binterm(T1,T2,T1+T2).
binterm(T1,T2,T1-T2).
binterm(T1,T2,T1*T2).
binterm(T1,T2,T1/T2) :- T2 =\= 0.
term([E],E).
term(List,Term) :-
split(List,Left,Right),
term(Left,LeftTerm),
term(Right,RightTerm),
binterm(LeftTerm,RightTerm,Term).
任期/2确实:
?- term([2,3,4],R).
R = 2+ (3+4) ;
R = 2- (3+4) ;
R = 2* (3+4) ;
R = 2/ (3+4) ;
R = 2+ (3-4) ;
R = 2- (3-4) ;
R = 2* (3-4) ;
R = 2/ (3-4) ;
R = 2+3*4 ;
R = 2-3*4 ;
R = 2* (3*4) ;
R = 2/ (3*4) ;
R = 2+3/4 ;
R = 2-3/4 ;
R = 2* (3/4) ;
R = 2+3+4 ;
R = 2+3-4 ;
R = (2+3)*4 ;
R = (2+3)/4 ;
R = 2-3+4 ;
R = 2-3-4 ;
R = (2-3)*4 ;
R = (2-3)/4 ;
R = 2*3+4 ;
R = 2*3-4 ;
R = 2*3*4 ;
R = 2*3/4 ;
R = 2/3+4 ;
R = 2/3-4 ;
R = 2/3*4 ;
R = 2/3/4 ;
false.
提前感谢!
发布于 2014-07-07 19:57:13
一种非常简单而且效率很低的方法可能是
u(Ns, Max, TMax) :-
term(Ns, TMax), Max is TMax, \+ ( term(Ns, Try), Try > Max ).
收益率
?- u([18,0.25,3,4],Max,Term).
Max = 864.0,
Term = 18/ (0.25/ (3*4)) .
https://stackoverflow.com/questions/24618558
复制相似问题