首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Prolog -获得列表元素的最大计算量

Prolog -获得列表元素的最大计算量
EN

Stack Overflow用户
提问于 2014-07-07 19:44:24
回答 1查看 102关注 0票数 1

我与PROLOG一起工作了两个星期,我无法解决以下问题:

定义u/3,它从数字列表中识别出可能的最佳算术项及其结果的最大值。示例:

代码语言:javascript
运行
复制
    ?- u([18,0.25,3,4],Max,Term).
    Max = 300.0,
    Term = (18/0.25- -3)*4 ;
    false.

我可以用它来解决这个问题:

代码语言:javascript
运行
复制
    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确实:

代码语言:javascript
运行
复制
    ?- 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.

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 19:57:13

一种非常简单而且效率很低的方法可能是

代码语言:javascript
运行
复制
u(Ns, Max, TMax) :-
  term(Ns, TMax), Max is TMax, \+ ( term(Ns, Try), Try > Max ).

收益率

代码语言:javascript
运行
复制
?- u([18,0.25,3,4],Max,Term).
Max = 864.0,
Term = 18/ (0.25/ (3*4)) .
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24618558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档