list - Prolog:Maplist将结果附加到主列表而不是子列表
问题描述
所以我将简单谓词定义为
pred(Info, List, Result) :-
maplist(pred_calculate(Info), List, Result).
pred_calculate
在对列表元素进行操作后返回 X 元素列表,因此例如pred_calculate(Info, List, Result)
会返回类似[2,3,5]
我想将所有将pred_calculate
谓词应用于 的所有元素的结果添加List
,我遇到的问题是,目前它将 pred_calculate 的所有结果添加为子列表,而不是仅添加到单个主列表中。
所以目前只在它应该返回的时候Result
返回
[[2,3,5],[5,7,8],[8,9,11]]
[2,3,5,5,7,8,8,9,11]
我将如何改变它来解决这种行为?
解决方案
使用foldl/4
with时,如果项目的顺序很重要1append/3
,则必须以正确的顺序传递参数以追加:
pred(Info, List, Result) :-
maplist(pred_calculate(Info), List, List1),
foldl([A, B, C] >> append(B, A, C), List1, [], Result).
此外,flatten/2
将达到相同的结果,即:
pred(Info, List, Result) :-
maplist(pred_calculate(Info), List, List1),
flatten(List1, Result).
1:foldl(append, List1, [], Result)
会给你[8,9,11,5,7,8,2,3,5]
结果。
推荐阅读
- java - 使用 Android 对 Firebase 数据库进行单元测试
- nvidia - OptiX 场景搭建突然很慢
- php - Symfony 4:如何在没有安全性的情况下使登录空间安全?
- android - EditText使用两种方式数据绑定重置游标文本插入
- javascript - 为什么 AJAX 请求不响应失败或成功?
- thymeleaf - 将对象列表映射到 thymeleaf 中的字符串列表
- python - 用 Kafka 发送 python 对象
- python - python的缺失字母方法
- android - 选择字符串中的前 X 个数字并用字符替换每个数字
- java - 尝试在 POSTMAN 中获取一个主题 http://localhost:8080/topics?id=1。收到以下错误