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