Megoldásgyűjtő beépített eljárások

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 21., 20:09-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologElm22}} * fejezetek: 4.6, 5.9 * SICStus User's manual: [http://www.sics.se/sicstus/docs/3.12.8/html/sicstus/All-Solutions.html All-…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


findall(Gyűjtő, Cél, Lista)

A Cél kifejezést eljáráshívásként értelmezi, meghívja és minden egyes megoldásához előállítja Gyűjtő egy másolatát (vagyis a megoldásban levő változókat új változókra cseréli).

Példa:

:- findall(X, (member(X, [1,7,8,3,2,4]), X>3), L).
L = [7,8,4] ?
:- findall(X-Y, (between(1,3,X), between(1,X,Y)), L).
L = [1-1, 2-1, 2-2, 3-1, 3-2, 3-3] ? 

bagof(Gyűjtő, Cél, Lista)

A Cél kifejezést eljáráshívásként értelmezi és összegyűjti a megoldásait. Azonban ha a Cél-ban vannak olyan üres változók, amelyek a Gyűjtő-ben nem szerepelnek, akkor ezek minden behelyettesítését felsorolja és külön-külön mindegyikhez összegyűjti a Gyűjtő összes megoldását Lista-ba.

Ha a második argumentum V1^...Vn^Cél alakú, akkor a V1, ..., Vn változók behelyettesítéseit nem sorolja fel.

Különbségek a findall-hoz képest:

  • Ha Cél-nak nincs megoldása, findall üres listát ad, bagof meghiúsul.
  • Ha Gyűjtő nem tömör, akkor
    • findall ezeket megoldásonként szisztematikusan új változókra cseréli.
    • bagof megőrzi a változókat.
  • A bagof végrehajtása időigényesebb.
gráf([a-b, a-c, b-c, c-d, b-d]).

| :- gráf(_G), findall(B, member(A-B, _G), VegP).
VegP = [b,c,c,d,d] ? ;
no

| :- gráf(_G), bagof(B, member(A-B, _G), VegP).
A = a, VegP = [b,c] ? ;
A = b, VegP = [c,d] ? ;
A = c, VegP = [d] ? ;
no

setof(Gyűjtő, Cél, Lista)

Tulajdonképpen ugyanaz, mint a bagof, de az eredménylistát rendezi, és kiszűri az ismétlődéseket.