计算Prolog中的总和

时间:2017-10-14 16:08:40

标签: prolog sum

我正在Prolog中从事专家系统任务,并且我正在努力改进我的代码。系统显示用户问题,每个人都有一个范围之间的答案(总是,经常,很少,从不)。对于每个问题,我想将值添加到最终总和中。 如您所知,在Prolog中,变量不可分配,因此我使用下一个技巧:

anyDisorder(Res):-
    Sum is 0,
    checkSymptom('Do you feel lonely?', Sum, Sum1),
    checkSymptom('Do you feel sad?', Sum1, Sum2),
    checkSymptom('Do you wish to be somewhere else?', Sum2, Sum3),
    Res is Sum3.

您可以看到每次我分配一个新变量以计算总和。 它有效,但我感觉不舒服。

有没有人有任何建议我可以使用?

1 个答案:

答案 0 :(得分:2)

  

Prolog变量不可分配

你是对的。但这个想法不是“模仿”命令式编程。实际上变量不可分配的事实应该“强迫”你用更多的逻辑编程方式思考。

例如,您不需要变量来跟踪总和。您只需将问题的结果存储在变量X1X2X3中,然后在程序中稍后总结。

所以我建议 checkSymptom/2仅返回值,然后将Res is X1 + X2 + X3写为最后一个语句:

anyDisorder(Res):-
    checkSymptom('Do you feel lonely?', X1),
    checkSymptom('Do you feel sad?', X2),
    checkSymptom('Do you wish to be somewhere else?', X3),
    Res is X1+X2+X3.

因此将其写成:

checkSymptom(Query, Outcome) :-
    %% ...
    %% ask the question
    %% set outcome to an integer

起初我发现变量无法分配怪异。但后来我意识到这有助于防止人们头疼。以上更具说明性和明确地说明了你在做什么。