prolog - Prolog - 以列表为条件过滤列表
问题描述
我有以下事实:
breads([italian_wheat, hearty_italian, honey_oat, parmesan_oregano, multigrain, flatbread]).
sauces([chipotle_southwest, ranch, bbq, chili_sauce, tomato_sauce, mayonnaise, mustard_sauce]).
unhealthy_breads([hearty_italian, honey_oat, parmesan_oregano, flatbread]).
unhealthy_sauces([mayonnaise, chipotle_southwest, ranch]).
现在我想通过不健康面包和不健康酱汁的列表过滤掉面包和酱汁。我想创建一个与此类似的“功能”:
filter(breads,unhealthy_breads,Healthy).
这给出了输出:
Healthy = [italian_wheat, multigrain]
有没有一种简单的方法可以做到这一点?
解决方案
类似的东西:
breads([italian_wheat, hearty_italian, honey_oat, parmesan_oregano, multigrain, flatbread]).
sauces([chipotle_southwest, ranch, bbq, chili_sauce, tomato_sauce, mayonnaise, mustard_sauce]).
unhealthy_breads([hearty_italian, honey_oat, parmesan_oregano, flatbread]).
unhealthy_sauces([mayonnaise, chipotle_southwest, ranch]).
test(Bad, X) :-
member(X, Bad).
filter(Data, Bad, Output) :-
call(Data, Input_1),
call(Bad, Input_2),
% Filter elements for which Goal fails.
% True if List2 contains those elements Xi of List1 for which call(Goal, Xi) fails.
exclude(test(Input_2),Input_1, Output).
例子
?- filter(breads,unhealthy_breads,Healthy).
Healthy = [italian_wheat, multigrain].
推荐阅读
- c# - 使用 LINQ 选择具有其他对象列表的对象
- python - 在没有 UI 的情况下使用 Maya
- angular - ngx-translate 数据库中的值?
- regex - Hadoop拆分/正则表达式
- vba - 防止用户编辑单元格和堆栈空间不足错误
- amazon-web-services - AWS 中的 ELK 堆栈用于搜索应用程序数据
- python - 如何正确终止 pynput 调用?现在它使我的 X 崩溃(self.socket_error)
- assembly - gdb:文件如何找到传入的参数?
- azure - 从单个函数方法中读取 host.json 中的设置
- php - Alamofire Swift:上传超过 10mb 的文件?