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

Sha*_*oor 2 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.
Run Code Online (Sandbox Code Playgroud)

查询只打印第一条记录为ds,我想打印特定日期的所有记录,即星期五,结果应为dsmpl.

告诉我!

aqu*_*qua 10

添加fail.到查询的末尾:

| ?- lectures(friday, X), write(X), nl, fail.
ds
mpl

no
| ?- 
Run Code Online (Sandbox Code Playgroud)

另请参阅这个非常相似的问题,因此在提出新问题之前,请尝试稍微使用搜索.


m09*_*m09 5

顺便说一句,如果你想让它更有用,你可以将它包装在谓词中:

display_lectures(Day) :-
    lectures(Day, X),
    write(X),
    nl,
    fail
    ;
    true.
Run Code Online (Sandbox Code Playgroud)

你的版本或@aqua的重要补充是真正的脱节.它会使这个调用在更大的谓词中可用,所以我想我会提到它.

另外,这是另一种方法(如果你的实现有某种形式forall/2):

display_lectures(Day) :- forall(lectures(Day, X), (write(X), nl)).
Run Code Online (Sandbox Code Playgroud)