在Prolog中使用规则与规则

时间:2014-03-18 11:26:01

标签: prolog

我需要帮助。我是prolog的新手,我没有习惯它。我想让其余的科目达到乔2没有注册的2级。 在prolog中有这些事实:

enrolled(joe,science).
enrolled(joe,math).

subjects(math, 2).
subject(science, 2).
subject(history,2).
subject(music, 2).
subject(health,3).
subject(literature,3).

我想要的输出是[历史,音乐]。我制作了这个规则,结合了subtract和findall内置的谓词,但没有用。可以有另一个可能的解决方案吗?感谢。

1 个答案:

答案 0 :(得分:0)

我不知道减去/ 2(你的意思是交叉?)。 无论如何,你应该使用findall / 3获得所需的列表:

get_subject_available(Name, X) :-
  findall(S, (subject(S,2), \+enrolled(Name,S)), X).