Az MOSML-értelmező használata

1.1. Kérdés.
Az SML-t hogy kéne használni? Prologban eligazodom, mert azt láthattuk az előadáson, hogy hogy kell használni. De az SML-t... Meg se bírok benne moccanni.

1.1. Válasz.
Hallgató: Ez szerintem is jó kérdés... Én letöltöttem a tárgy honlapjáról egy html-es segitséget, ami anno az eredeti mosml-honlapról származik. Azzal se vittem sokra... Odáig jutottam, hogy be tudtam loadolni, nem jelzett hibát loadoláskor, de utána meg sem moccant. Csak CONTROL+Z-re reagált. Szal nem sok... (Amúgy egy fájlból akartam betölteni a dolgot.... A honlapon van róla valami kis leírás.)

A kérdező folytatja: Végül arra sikerült rájönnöm, hogy az mosml.exe az indítható.

Hallgató: Mert nem olvastad el a readme.txt-t. :)))) Ott mindent leír. Még be kell írni két sort az autoexec.bat-ba is...

A kérdező folytatja: Na de hogy kéne abba vmi programot betölteni (consultálni, mint a Prologban)??? Vagy ott kell mindent bepötyögni? Nem hinném...

Hallgató: Nem, be is lehet tölteni egy use függvénnyel, bár nekem nem igazán ment...

A kérdező folytatja: És miért csak akkor szól vissza, ha ";"-t is leütök?? A pontosvessző az utasítás vége? vagy mi? Lehet, hogy én vagyok béna, de nekem ez a ";" teljesen új... Vagy nem figyeltem eléggé az előadáson??

Hallgató: Hát akkor már ketten nem figyeltünk...

A kérdező folytatja: Más. Mi az az emacs editor? Azzal kéne használni valahogy az SML-t? Mert ha igen, honnan lehet megszerezni?

Hallgató: Tudomásom szerint linux alá szövegszerkesztőnek indult, de kicsit már kinötte ezt a mivoltát. Azért még szöveget is lehet vele szerkeszteni. :))) Egy változata letölthető a tárgy honlapjáról: <http://dp.iit.bme.hu/download.html>, legfrissebb változata pedig az eredeti Gnu emacs honlapról: <http://www.gnu.org/software/emacs>.

A kérdező folytatja: Más: a weben merre lehet letölteni mosml kézikönyvet, dokumentációt, használati útmutatót????

Hallgató: A tárgy honlapjáról: <http://dp.iit.bme.hu/download.html> vagy az eredeti mosml honlapról: <http://www.dina.kvl.dk/~sestoft/mosml.html>.

Másik hallgató: Azt hiszem, nekem is hasonló érzéseim vannak a dologgal kapcsolatban, annak ellenére, hogy már valamennyire tudom használni.

Szóval az egyik fontos ,,meta-függvény'' a use, pl. use "filenev.sml". Ez hasonlóan működik a Sicstus consult-jához, már amennyire abból a három próbálkozásból meg tudtam ítélni...Például:

Moscow ML version 1.44 (August 1999)
Enter `quit();' to quit.
- use "imax.sml";
[opening file "imax.sml"]
> val imax = fn : int * int -> int
[closing file "imax.sml"]
> val it = () : unit
- imax(2, 3);
> val it = 3 : int
ahol az imax.sml:

(* imax (a, b) = a és b maximuma *)
fun imax (a, b) = if a >= b then a else b

Másik hallgató: Ha interaktív módban írsz be valamit, akkor csak a ; után kezd el foglalkozni a beírt dolgokkal, tehát a sorvége önmagában még nem jelent semmit (persze a ; után is kell egy sorvége a pufferelés miatt). Az sml fájlban viszont nem kell, mert ott a fájlvége jelre ,,indul be'' az értelmező.

1.2. Kérdés.
Hogyan kell az mosml-be betölteni egy vmi.sml kiterjesztésű fájlt???
1.2. Válasz.
Hallgató: Nagyon egyszerű: use "vmi.sml".

1.3. Kérdés.
Hogy lehet sml-ben (mosml, polyml) betölteni 1 .sml kiterjesztésű fájlt?

1.3. Válasz.
Oktató: Több helyen le van írva, hogy az interaktív környezetben a use függvényt kell használni (pl. use "fuggvenykem.sml"), az órákon időnként elmondtam. Részletesen lásd pl. a következő forrásokat (mindkettőt egyébként is érdemes megnézni):

a) Module Meta, <http://dp.iit.bme.hu/mosml/doc/mosmllib.pdf>-ben.

b) The interactive system: mosml, <http://dp.iit.bme.hu/mosml/doc/manual.pdf>

Mindkettő az mosml-disztribúció része, ezért valószínűleg megtalálja a saját gépén is...:)

1.4. Kérdés.
SML-ben nem tudom sehogysem include-olni a list library-t. Tudna valaki segíteni?

1.4. Válasz.
Hallgató: Nekem valami load "List" (nagy kezdőbetűvel!) rémlik, de lehet, hogy nem jól emlékszem.

1.5. Kérdés.
A következő problémám van mosml-ben. Pl. Math.sin használatakor a következőt írja ki:
> - Math.sin 1.0;
> ! Toplevel input:
> ! Math.sin 1.0;
> ! J
> ! Cannot access unit Math before it has been loaded.
Viszont a List könyvtár függvényeit tudom használni. Mi lehet a probléma?

1.5. Válasz.
Oktató: A load "Math"; függvényalkalmazással előbb be kell tölteni az mosml-interpreterbe. A List könyvtárat az mosml az indulásakor mindig betölti.

1.6. Kérdés.
A kisháziban használom a Math.sqrt függvényt. Hogyan lehet rábírni az mosml-t, hogy betöltse a Math modult, amikor valaki betölti a kisházit use "khf-ml1.sml"-lel?

1.6. Válasz.
Hallgató: Interaktív módban a load "Math"-t vagy a loadOne "Math"-t használd.

Ha a programodat use-zal töltöd be, akkor akár a fájlban is lehet a load "Math", de kiadhatod kézzel a use előtt is. A load ti. csak interaktív módban működik, fordításkor nem, akkor viszont hibát okoz. Ez utóbbi miatt (mivel a házi feladatokat mosmlc-vel lefordítjuk) a beküldött programból ki kell kommentezni vagy ki kell törölni a load-okat.

Az open más célra való: pl. az open Math hatására elhagyhatók a Math. prefixek a függvényhívások elől. Inkább ne használd, jobb, egyértelműbb a prefix kiírása, még ha hosszabb lesz is a kód.

1.7. Kérdés.
Röviden fogalmazva: van valamilyen debugger-szerűség az mosml-ben?

1.7. Válasz.
Oktató: Röviden fogalmazva: debugger nincs.

1.8. Kérdés.
Már volt egy hasonló kérdés a Prologról, de sml-ben hogyan lehet megoldani, hogy a teljes listát írja ki, ne harapja le a végét?

1.8. Válasz.
Oktató: Hosszú lista, ill. egymásba skatulyázott adatszerkezetek esetén printVal (és maga az SML-értelmező is) alapesetben csak az első 200 listaelemet, ill. legfeljebb 20 szintet ír ki. A hosszat a printLength, a szintek számát a printDepth frissíthető változó szabályozza. Mindkét érték felülírható.



Subsections

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