Egyikőtöktől kaptam egy levelet, amire való válaszomat közreadom, remélhetően mindannyiótok okulására. Nyomj egy PageDown-t, ha meg akarod nézni.

Péter























































Úgy látom, hogy a "mindent-vagy-semmit hozzáállással" oldod meg a feladatot: ha vannak ismeretlenek megvárjuk, hogy mindegyik behelyettesítődjön. De ez nagyon gyenge következtetést ad. Pl. egy ilyen hívás esetén:
         | ?- sat(A*B)                                   (*)
elvárható, hogy  következtesse ki, hogy A=1, B=1.

A mininat-hoz hasonló módon azt javasolom, hogy ezt a (*) példát fordítsd egy *(A,B,1) hívásra, és a  * /3 predikátumot írd meg úgy, hogy ha a harmadik argumentumról kiderül, hogy 1, akkor helyettesítse be az első kettőt 1-re. (Érdemes megnézned a 39. fólán levő példát, ami a negációt kezelő ~ /2 eljárást valósítja meg ezen elvek mentén.)

Hasonlóképpen az *(A,1,B) ébredjen fel, és egyesítse A-t B-vel (ehhez az =? when-es ébresztés és az == azonosság-vizsgálat kell, mint a 39. fólián szereplő ~ /2 -ben). A 40. fólia alján három további példa szerepel, hogy milyen "következtetéseket" várhatunk el a + /3, * /3 és # /3 eljárásoktól.

Péter