2016-10-13 34 views
1

我一直在嘗試使用這段代碼一段時間,它說有一個語法錯誤,但我不知道它是什麼。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. 

回答

0

不能使用的條款的名稱的變量,你可以代替寫:

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

不能直接「參數」的函子,但你可以使用=../2運營商,統一了一個仿函數和參數有一個列表:

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

這就避免了硬編碼在您的謂詞的各種問題。另外,比較運算符>=/2將評估表達式,因此不需要單獨的is/2