list - 列出序言中的交集
问题描述
我是 Prolog 的新手,我尝试编写 5 个列表并获取它们之间的交集,我如何实现这一点,** 列表将在文件中定义,因此它不是来自用户的输入。
我看到很多资源,他们用两个列表实现它,如果我将列表作为用户的查询,它的工作正常......但是当我尝试在文件中预定义列表时它不起作用。
对我的项目的一部分进行简单描述以更清楚地说明...菜单将显示,用户将从每个季节、天气状况、场合中选择一个...列表将列出适合的衣服
例如,用户选择“冬季”季节、“下雨”天气状况和“婚礼”场合列表
rainy([take_umbrella, jacket,coat]).
winter([jacket,sweater,coat,take_umbrella]).
wedding ([take_umbrella,dress,jacket,coat]).
所以结果形式的交集将是 take_umbrella ,jacket,coat
我希望我的想法很清楚,并提前谢谢你:)
解决方案
我尝试在文件中预定义列表,它的工作。你在文件中的列表不起作用?我不知道。我修复了你的错误,因为你的粘贴不是没有错误的,然后它就可以工作了。
?- winter(Winter),
rainy(Rainy),
wedding(Wedding),
intersection(Winter, Rainy, Winter_and_Rainy),
intersection(Winter_and_Rainy, Wedding, Winter_and_Rainy_and_Wedding).
Winter = [jacket, sweater, coat, take_umbrella],
Rainy = [take_umbrella, jacket, coat],
Wedding = [take_umbrella, dress, jacket, coat],
Winter_and_Rainy = Winter_and_Rainy_and_Wedding, Winter_and_Rainy_and_Wedding = [jacket, coat, take_umbrella].
但如果不知道有多少列表,您可能会列出并减少列表。
?- % make some lists L1, L2, ..., Ln,
foldl(intersection, [L1, L2, ..., Ln-1], Ln, Intersection).
在下雨的婚礼上冬天是什么时候,你会减少:
?- winter(Winter), rainy(Rainy), wedding(Wedding),
foldl(intersection, [Winter, Rainy], Wedding, Intersection).
Winter = [jacket, sweater, coat, take_umbrella],
Rainy = Intersection, Intersection = [take_umbrella, jacket, coat],
Wedding = [take_umbrella, dress, jacket, coat].
你看到元素的顺序是变化的,但它有问题吗?对我来说没问题。
推荐阅读
- ruby-on-rails-4 - 轨道控制器上的测试顺序
- exact-online - 获取被阻止的 Exact Online 部门列表
- javascript - 我怎样才能使这个事件滑块工作?
- c++ - C++ 猜数字游戏
- docker - 在 Ubuntu 18.04 上安装 Docker?
- mysql - 使用 VBA 在 Microsoft Dynamcis CRM 2011 或 ASPX 中查询信息
- c++ - 递归模板参数包编程
- python - Flask URL 中的 userinfo 组件
- mysql - mysql CREATE TABLE STRING_TO_DATE 统一两种日期格式
- python - 多元回归 Python