所以我将简单谓词定义为
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]
我如何更改它以修复此行为?
答案 0 :(得分:2)
将foldl/4
与append/3
一起使用时,如果项目的顺序很重要,则必须以正确的顺序传递参数 1 :
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]
。