首页 > 解决方案 > 从谓词返回多个对象

问题描述

我有一个基本的 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

标签: prolog

解决方案


尝试这个:

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

推荐阅读