распечатать все записи, используя запрос в прологе - PullRequest
2 голосов
/ 12 января 2012
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 ]

10 голосов
/ 12 января 2012

Добавьте fail. в конец вашего запроса:

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

no
| ?- 

Также посмотрите этот очень похожий вопрос , поэтому попробуйте использовать поиск немного больше, прежде чем задавать новый вопрос.

5 голосов
/ 12 января 2012

Кстати, если вы хотите сделать его более удобным, вы можете заключить его в предикат:

display_lectures(Day) :-
    lectures(Day, X),
    write(X),
    nl,
    fail
    ;
    true.

Важным дополнением к вашей версии или @ aqua здесь является разделение с истиной. Это сделает этот вызов пригодным для использования в большем предикате, поэтому я подумал, что упомяну это.

И, альтернативно, есть еще один способ сделать это (если ваша реализация имеет какой-то forall/2):

display_lectures(Day) :- forall(lectures(Day, X), (write(X), nl)).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...