2011-04-16 71 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.