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
解决方案
尝试这个:
meal(X,Y) :-
findall(Z,(entre(X,Z);side(X,Z)),Y).
推荐阅读
- c# - 在 C# 中从 Windows 服务访问 NFS 驱动器
- r - R简易版中的折叠列
- azure-cognitive-search - 使用完整的 Lucene 语法匹配除某些术语之外的所有文档
- python - 如何在没有第一个和最后一个特殊字符的情况下使用正则表达式拆分字符串
- python-3.x - 使用不同的分隔符保存文本文件
- html - html 页面中的视频无法在移动设备上播放
- c++ - glm::quatLookAt 返回一个 NaN 四元数
- java - java中扫描仪输入的if语句
- c++ - 拦截 CUDA 调用
- python - GPT2 on Hugging face(pytorch transformers) RuntimeError: grad can be implicitly created only for scalar outputs