Interaktív módban, azaz az mosml-lel a Meta.compile : string -> unit függvény alkalmazásával is le lehet fordítani a programot,.
A fordítás után (kizárólag az interaktív módban!) az
Első kérdésem: hogyan lehet SML esetén a programból gondoskodni a list könyvtár betöltéséről és megnyitásáról?
Nem interaktív esetben, pl. a beadandó program esetén (mosmlc): semmit nem kell írni, tenni, a ,,főmodullal'' együtt az összes szükséges modult betölti a futtatórendszer. Magyarán: a fogadószkript lefordítja a kapott Lepeget.sml fájlt (a specifikációjának ki kell elégíteni a Lepeget.sig szignatúrát, amelyet azonban nem kell beküldnie!), betölti (vele együtt betöltődik minden, ami kell), és futtatja.
Ha valaki több fájlra bontja a megoldását, akkor minden állományt be kell küldenie (.sml és esetleg .sig kiterjesztéssel), ezeket a fogadószkript mind lefordítja és betölti.
A kérdező folytatja: Második kérdésem: mennyire kell szoros időkorlátokra számítani? Azért kérdezem, mert az SML programom 12 hosszúságú bemenetekre már kb. 20 másodpercet molyol, amit elég soknak érzek a Prolog programom 2-3 másodpercéhez képest.
Oktató: Valóban indokolatlanul sok a Prologhoz képest. Az időkorlátba várhatóan mégis bele fog férni, 12 elemű sorozatra most 60 s-ot adunk. De hétfő estig még javíthat a programján...
A kérdező folytatja: Harmadik kérdésem: mit jelent az, hogy használjunk értelmes neveket? Nekem ez néha nagyon nehéz feladatnak tűnt... Az elég, ha számomra értelmesek a nevek? ;-)) Nyilván nem, de ezt a kitételt nagyon szubjektívnek érzem.
Oktató: Valóban nehéz, ezért gyakoroltatjuk. ;-) Másszóval azt várjuk el, hogy kifejező neveket használjanak. A programok általában (nem a hf-ekre gondolok) hosszú életűek, rendszerint túlélik a programozójukat a cégnél. Olyan neveket kell használni, amelyeket majd a fejlesztő utódok is viszonylag könnyen megértenek. Ezért kell persze a megfelelően áttekinthető, a program felépítését, szerkezetét magyarázó dokumentáció is.
A kérdező folytatja: Negyedik kérdésem: az SML-ben hogyan lehet rendezni egy, a nagyháziban használt bemenő listát? Tudom, hogy a függvény bemenete eleve rendezett, csak kíváncsi vagyok...
Oktató: Nézze meg a Listsort.sig-ben a Listsort.sort használatát. Vagy nézze meg a jegyzetben a listák rendezéséről szóló fejezetet, és írja meg a rendezőprogramot.
Megjegyzés. Az open éppen olyan deklaráció, mint bármelyik más abból a szempontból, hogy local ... in ... end deklarációk vagy let ... in ... end kifejezések deklarációs részében is használható, és ilyenkor a hatása természetesen lokális. Például
Sajnos, listák esetén az ilyenfajta mintaillesztési (pattern match) figyelmeztetéseket csak magának a mintaillesztésnek a mellőzésével lehet elkerülni.
Tegyük fel, hogy az alábbi függvény fordításakor kapta a figyelmeztetést: