使用prolog中的查询打印所有记录

时间:2012-01-12 03:47:34

标签: prolog

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 < /强>

更新我!

2 个答案:

答案 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)).