我的Prolog程序输出的结果不是他们应该得到的结果

时间:2019-11-20 08:45:12

标签: prolog

我正在制作一个序言程序,一个人可以在其中找到学生的分数。他们可以通过输入以下代码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').

1 个答案:

答案 0 :(得分:2)

关于当前方法的一些注意事项:

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

    在编写X = c时,Prolog将检查项marksA is 85是否等于markA的算术求值,该值总是错误的。相反,您应该使用85。在这里,MarksA is 85被理解为变量,并且由于尚未分配变量,因此Prolog将使用MarkA对其进行分配。

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

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

write

查询程序将给出:

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