prolog中的setof

prolog中的setof,prolog,prolog-setof,Prolog,Prolog Setof,prolog中setof的源代码是什么?如果您正在寻找Sicstus内置谓词实现,可以在这里找到它:如下所示: ?- listing(setof). :- meta_predicate setof(?,0,-). setof(A, B, F) :- free_variable_set(A, B, D, C), ( C==v -> findall(A, D, E), E\==[], sort(E, F) ; find

prolog中setof的源代码是什么?

如果您正在寻找Sicstus内置谓词实现,可以在这里找到它:如下所示:

?- listing(setof).
:- meta_predicate setof(?,0,-).

setof(A, B, F) :-
    free_variable_set(A, B, D, C),
    (   C==v
    ->  findall(A, D, E),
        E\==[],
        sort(E, F)
    ;   findall(C-A, D, E),
        (   ground(E)
        ->  sort(E, G),
        pick(G, C, F)
        ;   bind_bagof_keys(E, _),
        sort(E, G),
        pick(G, C, H),
        sort(H, F)
        )
    ).

true.
与findall/3和bagof/3不同,setof不返回重复项,并给出排序顺序


I.

您是否正在寻找特定的实现?我用SWI Prolog作为我的答案,但如果你愿意,我可以给你另一个。
setof(+Template, +Generator, -Set)