You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prolog中编写带条件判断的投资决策decision函数

代码存在的问题

  1. 语法规则错误:Prolog不支持谓词嵌套定义,你把saving、income两个谓词的实现直接写在了decision谓词的内部,这属于基础语法错误,代码无法正常运行。
  2. 变量引用错误:最后一个分支的判断条件写的是I =< Minsaving,和你要实现的逻辑完全不符,你需要对比的是收入I和最低收入线Minincome,这里属于变量用混。
  3. 逻辑结构混乱:没有按照你要求的优先级处理分支:存款低于最低值是最高优先级的判断条件,剩下两个分支都要在存款达标的前提下再判断收入,你原来的代码没有做分层判断,用分号拼接的分支逻辑也不符合需求。
  4. 运算符错误:Prolog的小于等于运算符是=<,你代码里的=&lt;是HTML转义后的写法,属于格式错误。

修正后的实现

你可以直接用Prolog的条件分支结构实现,不需要额外定义多余谓词,逻辑更清晰:

decision(I, D, S) :-
    MinIncome is 9000 + 2500 * D,
    MinSaving is D * 3000,
    (   S < MinSaving -> 
        write('You should invest your money into savings. ')
    ;   I > MinIncome -> 
        write('You should try to invest in NYSE stock market. ')
    ;
        write('You should invest your money into both, saving and stock market. ')
    ).

如果偏好拆分成多个谓词的写法,也可以用cut(!)控制分支匹配:

decision(I, D, S) :-
    MinIncome is 9000 + 2500 * D,
    MinSaving is D * 3000,
    judge(S, I, MinSaving, MinIncome).

judge(S, _, MinSaving, _) :-
    S < MinSaving,
    write('You should invest your money into savings. '),
    !.
judge(_, I, _, MinIncome) :-
    I > MinIncome,
    write('You should try to invest in NYSE stock market. '),
    !.
judge(_, _, _, _) :-
    write('You should invest your money into both, saving and stock market. ').

两种写法都完全符合你要求的逻辑:优先判断存款是否达标,不达标直接走存款投资建议;存款达标后判断收入,收入高于最低线建议投股票,否则建议两者都投。

内容的提问来源于stack exchange,提问作者Smit Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:36:06