3
prolog中的setof的源代碼是什麼?序言中的setof
prolog中的setof的源代碼是什麼?序言中的setof
?- 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.
在你正在尋找Sicstus內置謂詞實現的情況下,它可以在這裏找到:http://www.sics.se/sicstus/docs/4.2.1/html/sicstus/mpg_002dref_002dsetof.html爲:
setof(+Template, +Generator, -Set)
不同的findall/3和bagof/3,SETOF不返回重複並確實給出排序的順序。
I.
您是否在尋找特定的實現?我用SWI-Prolog來回答,但如果你願意,我可以再給你一個。 – 2011-04-16 03:32:54