我正在制作一个序言程序,使人们可以找到学生的分数。他们可以通过输入此代码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区分大小写,小写标识符理解为谓词/功能符号,大写标识符理解为变量。因此,询问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.