我有一个基本的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
答案 0 :(得分:0)
尝试一下:
meal(X,Y) :-
findall(Z,(entre(X,Z);side(X,Z)),Y).