Prologból SML?

25.1. Kérdés.
Mostanáig Prologgal küzdöttem, most pedig nekiláttam az SML-nek. Egyelőre nem sok sikerrel. Azt hiszem, ott rontom el, hogy nem tudok elszakadni a prologos megközelítéstől. Prologban a lepeget(...) eljárás megírásakor a member(...) eljárást felhasználhattam arra, hogy egy ténylegesen lépegető algoritmussal az összes lehetséges pontba ellépjek. Ennek a megoldásnak mind külön ágai voltak. SML-ben ugyan alkalmazhatok egy függvényt egy lista minden elemére (pl. map-et), de annak az eredményei egy listában jönnek létre, nem pedig mint önálló elágazások.

25.1. Válasz.
Oktató: Ajánlom figyelmébe a Prolog-jegyzet 4.5. alfejezetét (Megoldások gyűjtése és felsorolása). Ott láthat egy semát arra, hogyan lehet felsoroló eljárást gyűjtőve átalakítani a Prologban. Persze ehhez tényleg át kell alakítania a programja szerkezetét, tehát nem használhatja a member-t és más beépített eljárásokat a felsorolásra. Ezek helyett egy

kovetkezo(+V0, +Param, -E, -V)
eljárást kell írnia, amelynek a bemenő paraméterei a kövekezők:

a kimenők pedig:

Ha egy ilyen segédeljárásra építve oldja meg a feladatot Prologban, akkor ezt a megoldást könnyen át tudja ültetni SML-be is.

25.2. Kérdés.
Meg tudna mondani valaki, hogy az SML-ben hogyan lehet lekérdezni egy értékről, hogy változó-e? A prologos var(X) megfelelőjére gondolok.

25.2. Válasz.
Oktató: Az SML-ben a változónak mindig van értéke, tehát a Prolog var(X) vizsgálat megfelelője mindig meghiúsulna, ha lenne: ezért nincs is ilyen vizsgálat).

A hagyományos funkcionális nyelvek, mint pl. az SML, nem ismerik a logikai változó fogalmát, de az újabb funkcionális nyelvekben (pl. Oz, Alice) megjelenik ez a nyelvi elem is.


Deklaratív programozás - FP-GYIK
2005. március 1.