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