从谓词返回多个对象

时间:2020-04-26 19:57:22

标签: prolog

我有一个基本的Prolog事实库,由主菜,餐具和配料组成。我希望编写一个名为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 :(得分:0)

尝试一下:

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