【发布时间】:2014-03-18 21:24:33
【问题描述】:
我需要帮助。我是序言的新手,我还没有习惯它。我想获得 joe 没有注册的 2 级剩余科目。 在序言中包含这些事实:
enrolled(joe,science).
enrolled(joe,math).
subjects(math, 2).
subject(science, 2).
subject(history,2).
subject(music, 2).
subject(health,3).
subject(literature,3).
我想要的输出是[历史,音乐]。我通过内置谓词的减法和 findall 组合制定了这条规则,但没有奏效。可以有另一种可能的解决方案吗?谢谢。
【问题讨论】:
-
为什么不显示您尝试过的代码?如果您使用
findall,您应该分步完成您的解决方案。首先,编写一个谓词subjects_i_want(S),如果S是2 级主题,并且joe没有注册主题S,则该谓词为真。要编写这样的谓词,您只需将该语句转换为 Prolog。然后你在那个谓词上运行findall。 -
@mbratch 我是这样做的。 get_subject_available(Name,X) :- 减法(subjects(N, 2), findall(X0, registered(Name, X0), X).
-
您应该在问题陈述中显示该代码。但该语法不是正确的序言语法。您不能在尝试时将谓词查询嵌入到其他谓词查询中,除非谓词旨在处理它们。你还没有定义
subtract/2。
标签: prolog