Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
pp:lplcut [2019/05/06 14:01] dmihai |
pp:lplcut [2019/05/06 14:30] (current) dmihai [Colectarea rezultatelor] |
||
|---|---|---|---|
| Line 251: | Line 251: | ||
| ?- | ?- | ||
| </code> | </code> | ||
| - | |||
| - | <note> | ||
| - | În ultima interogare, nu contează dacă predicatul folosit în exterior este ''bagof/3'' sau ''findall/3''. Goal-ul de demonstrat (''bagof(C, parent(P, C), L)'') nu conține variabile "din afară". | ||
| - | </note> | ||
| Ca urmare a felului de funcționare, o diferență notabilă între ''findall/3'' și ''bagof/3'' este că, atunci când goal-ul nu poate fi satisfăcut, ''findall/3'' reușește, generând o listă vidă, iar ''bagof/3'' eșuează. | Ca urmare a felului de funcționare, o diferență notabilă între ''findall/3'' și ''bagof/3'' este că, atunci când goal-ul nu poate fi satisfăcut, ''findall/3'' reușește, generând o listă vidă, iar ''bagof/3'' eșuează. | ||
| Line 322: | Line 318: | ||
| ?- | ?- | ||
| </code> | </code> | ||
| + | |||
| + | <note> | ||
| + | În mod default, swi-prolog trunchiază listele rezultat, afișând doar primele elemente și ''...'' pentru restul. Pentru a schimba acest comportament folosiți interogarea ''set_prolog_flag(answer_write_options,[max_depth(0)]).'': | ||
| + | |||
| + | <code> | ||
| + | ?- findall(P, parent(P, C), L). | ||
| + | L = [bestla, bestla, bestla, jorth, frigg, buri, borr, borr, borr|...]. | ||
| + | |||
| + | ?- set_prolog_flag(answer_write_options,[max_depth(0)]). | ||
| + | true. | ||
| + | |||
| + | ?- findall(P, parent(P, C), L). | ||
| + | L = [bestla,bestla,bestla,jorth,frigg,buri,borr,borr,borr,odin,odin]. | ||
| + | </code> | ||
| + | |||
| + | Soluție alternativă găsiți [[https://stackoverflow.com/a/36948699|aici]]. | ||
| + | </note> | ||
| ==== Exerciții ==== | ==== Exerciții ==== | ||