setof in prolog

时间:2011-04-16 03:05:59

标签: prolog prolog-setof

prolog中setof的源代码是什么?

2 个答案:

答案 0 :(得分:7)

?- 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.

答案 1 :(得分:0)

如果您正在寻找Sicstus内置谓词实现,可以在此处找到:http://www.sics.se/sicstus/docs/4.2.1/html/sicstus/mpg_002dref_002dsetof.html as:

setof(+Template, +Generator, -Set)

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