高阶谓词:将列表拆分为两个列表,一个满足谓词,另一个不满足

问题描述 投票:0回答:0

我正在尝试创建一个获取列表和谓词的谓词。给定列表中满足给定谓词的每个元素都应进入列表 1,否则进入列表 2.

例如:

partition(>(6), [1,7,5,6,3,8], Rs1, Rs2)

这应该导致 Rs1=[1,5,3] 和 Rs2=[7,6,8]

我试过这个:

partition(P, [], [], []).
partition(P, [X|Xs], Rs1, Rs2) :- 
    call(P,X,T),
    ((T=true, append(Rs1, X, Rs12))
    ; (T=false, append(Rs2, X, Rs22))),
    partition(P, Xs, Rs12, Rs22).

但由于某种原因,我没有得到想要的结果。为什么?

list prolog higher-order-functions
© www.soinside.com 2019 - 2024. All rights reserved.