lectures(monday, nolecture).
lectures(tuesday, vp).
lectures(tuesday, se).
lectures(tuesday, ddbms).
lectures(wednessday, ds).
lectures(wednessday, mpl).
lectures(thursday, vp).
lectures(thrusday, se).
lectures(friday, ds).
lectures(friday, mpl).
lectures(saturday, ai).
lectures(saturday, ddbms).
?- lectures(friday, X), write(X),nl.
查询仅打印第一条记录为 ds ,我想在特定日期(即星期五)打印所有记录,结果应为 ds 和 mpl < /强>
更新我!
答案 0 :(得分:10)
将fail.
添加到查询的末尾:
| ?- lectures(friday, X), write(X), nl, fail.
ds
mpl
no
| ?-
另请参阅this very similar question,因此在提出新问题之前,请先尝试使用搜索。
答案 1 :(得分:5)
顺便说一句,如果你想让它更有用,你可以将它包装在谓词中:
display_lectures(Day) :-
lectures(Day, X),
write(X),
nl,
fail
;
true.
您的版本或@aqua的重要补充是这里的真正脱节。它会使这个调用在一个更大的谓词中可用,所以我想我会提到它。
另外,这是另一种方法(如果你的实现有某种forall/2
):
display_lectures(Day) :- forall(lectures(Day, X), (write(X), nl)).