Возврат нескольких объектов из предиката - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть основа c База фактов Пролога, состоящая из закусок, сторон и ингредиентов. Я sh напишу предикат meal(X,Y), который принимает либо обед / ужин для параметра x и возвращает вход и обе стороны. т.е. meal(lunch,X) возвращает бутерброд, чипсы, лимонад.

/* Facts */

entre(lunch, sandwich).
entre(dinner, spaghetti).

side(lunch, chips).
side(lunch, lemonade).
side(dinner, bread).
side(dinner, greentea).

ingredient(chips, potato).
ingredient(chips, salt).
ingredient(lemonade, lemon).
ingredient(lemonade, sugar).
ingredient(bread, egg).
ingredient(bead, flour).
ingredient(greentea, green).
ingredient(greentea, tea).

/* Rules */


meal(X,Y) :- entre(X,Y) ; side(X,Y).

Я не могу заставить его работать, поскольку он только возвращает

| ?- meal(lunch, X).

X = sandwich ?

yes

1 Ответ

0 голосов
/ 30 апреля 2020

Попробуйте это:

meal(X,Y) :-
    findall(Z,(entre(X,Z);side(X,Z)),Y).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...