Prolog:Maplist将结果附加到主列表而不是子列表

时间:2018-05-11 11:33:22

标签: 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]

我如何更改它以修复此行为?

1 个答案:

答案 0 :(得分:2)

foldl/4append/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]