【问题标题】:Trouble with this Prolog Rule这个 Prolog 规则的问题
【发布时间】:2021-12-27 13:53:21
【问题描述】:

如果我有这样的事实:

ss(30,  1).
ss(29,  2).
ss(27,  3).
ss(23,  5).
ss(18,  7).
ss(13,  8).
ss( 8,  9).
ss( 4, 11).
ss( 3, 12).

如何定义规则:

calculate_ss(Year, Score)

给出:

calculate_ss(10, S). 给出 S = 9
calculate_ss( 8, S). 给出 S = 9
calculate_ss(24, S). 给出 S = 5

答案应该是年份(来自规则输入)大于年份(来自事实)的最高分

【问题讨论】:

    标签: math prolog rules


    【解决方案1】:

    假设您的意思是“大于或等于”,并且“最高分”是数字“ss”事实中已经提供的:

    calculate_ss(Year, Score) :-
        calculate_ss_(Year, Score).
        
    calculate_ss_(Year, Score) :-
        ss(Year, Score),
        % Found answer
        !.
    
    calculate_ss_(Year, Score) :-
        % Look backwards through the years
        succ(Year0, Year),
        calculate_ss_(Year0, Score).
    

    swi-prolog 中的结果:

    ?- calculate_ss(10, S).
    S = 9.
    
    ?- calculate_ss(8, S).
    S = 9.
    
    ?- calculate_ss(24, S).
    S = 5.
    

    【讨论】:

    • 谢谢。这正是我所需要的。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多