2011-04-16 29 views
3

prolog中的setof的源代码是什么?序言中的setof

+0

您是否在寻找特定的实现?我用SWI-Prolog来回答,但如果你愿意,我可以再给你一个。 – 2011-04-16 03:32:54

回答

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.