Prolog语法问题 - 变量函数

时间:2016-10-13 13:08:11

标签: prolog

我一直在尝试使用此代码一段时间,它说有语法错误,但我不确定它是什么。

studies(ahmed,history(77,63)).
studies(john,chemistry(0,21)).

passed(Person,Subj):-
    studies(Person, Subj(Work, Exam)),
    Final is Work + Exam,
    Final >=60.

2 个答案:

答案 0 :(得分:1)

你不能直接“参数化”仿函数,但你可以使用=../2运算符,它将一个仿函数和参数与一个列表统一起来:

passed(Person, Subj):-
    studies(Person, SubjWorkExam),
    SubjWorkExam =.. [Subj, Work, Exam],
    Work + Exam >= 60.

这可以避免对谓词中的各种主题进行硬编码。此外,比较运算符>=/2将评估表达式,因此不需要单独的is/2

答案 1 :(得分:0)

您不能将变量用作子句的名称,您可以改为编写:

passed(Person,Subj):-
    (Subj=history-> studies(Person, history(Work, Exam))
    ;Subj=chemistry-> studies(Person, chemistry(Work, Exam)),
    Final is Work + Exam,
    Final >=60.