Levente Zsíros <zslevi(a)gmail.com> writes:
Akkor egy
A in 1..100, B=A, B+3#=5.
típusú célból is lehet baj? Az egyesítés ebben az értelemben másolásnak
számít?
Nem, egyesiteskor nem tortenik masolas. Pl. az A = B egyesites, ahol B meg
garantaltan behelyettesitetlen (mint fenn) konstans ideju, csak egy A-ra
mutato referencia beirasat jelenti a B-be.
Ezzel szemben egy bagof/findall-ban a gyujto-kifejezes erteket le kell
masolni. Pelda:
| ?- findall(A, append(_, A, [1,2,3,4,5]), L).
Itt az append elso lefutasa utan A = [1,2,3,4,5] lesz. Nem lehet csak egy
pointert elrakni az A-ra, mert visszalepeskor az A erteke megvaltozik
majd. Tehat tenylegesen keszitunk egy masolatot az [1,2,3,4,5] listarol,
majd meghiusulunk. Ekkor az append masodik megoldaskent visszaadja A-ban a
[2,3,4,5] listat ezt is lemasoljuk, stb. A masolasok lenyegeben egy assert
segitsegevel tortennek, a Prolog jegyzetben es foliakon szerepel, hogy
hogyan lehet a findall-t Prologban megirni.
-Peter