我的Prolog程序输出的结果不是应该的结果

问题描述 投票:0回答:1

我正在制作一个序言程序,使人们可以找到学生的分数。他们可以通过输入此代码marks_chemistry(personsname)来执行此操作。

但是,当输入此代码时,输​​出为no,而不是其标记应为的标记。

一般而言,我对序言和编码还是比较陌生,因此,我们将不胜感激。

male(albert). male(paul). female(jessica). female(rebecca). female(natalie).

marks_chemistry(paul) :-
   marksA is 85,
   write('Paul got', marksA, '85/100').
prolog
1个回答
0
投票

关于当前方法的一些说明:

  • 谓词始终输出是/否(否则它们将进入无限循环)。他们不能“返回”其他值。但是,在评估过程中,它们可能会产生副作用,例如将消息打印到控制台。
  • Prolog区分大小写,小写标识符理解为谓词/功能符号,大写标识符理解为变量。因此,询问Prolog ?- a = b.会给您答案no,但是?- X = b会给您答案X = b,询问?- a(X) = b会给您no,但是?- a(X) = b(c)会给您X = c

    [当您编写marksA is 85时,Prolog将检查markA项是否等于85的算术评估,该评估始终为假。相反,您应该使用MarksA is 85。在这里,MarkA被理解为变量,并且由于尚未分配变量,因此Prolog会将其分配为85

  • write谓词不支持可变参数。您必须分别为每个参数使用write,或使用格式设置(请参见here)。

基于这些观察,您的程序可以重写为:

marks_chemistry(paul) :-
   MarksA is 85,
   write('Paul got '),
   write(MarksA),
   writeln('/100').

查询程序将给出:

?- marks_chemistry(paul).
Paul got 85/100
true.
© www.soinside.com 2019 - 2024. All rights reserved.