Kiírás

18.1. Kérdés.
Hogyan lehetne csak egyetlen klóz paramétereit kiíratni, amikor meghívódik? Hogyan lehet abortálásnál megtudni, hogy hol tartott a program, és mik voltak a változókban? Ezt pedig már kérdezték, csak elfelejtettem: hogyan lehet nagyobb mélységig kiíratni egy listát?

18.1. Válasz.
Oktató: Tetszőleges típusú érték kiírására a printVal függvényt használhatja az SML-ben, de csak interaktív módban. Vagy használhatja a print-et, de az string típusú argumentumot vár. A printDepth frissíthető változót használhatja a kiírási mélység megváltoztatására.

A print a TextIO.sig-ben, a másik kettő a Meta.sig-ben van leírva. Az MOSML Owner's Manual-ben találja meg, hogyan állíthatja be printDepth értékét. Mindezek a letöltött mosml-csomagban megtalálhatók.

18.2. Kérdés.
Meg tudná mondani valaki, hogy hogyan tudok nem toplevelen kiíratni valamit? Olyankor a print-re azt mondja, hogy syntax error.

18.2. Válasz.
Oktató: A print (típusa: string -> unit) mindig működik. A printVal (típusa: 'a -> 'a) az, ami csak interaktív módban működik, de az mosml Syntax error-t a printVal-ra sem mondhat. Ha mosmlc-vel megpróbálom lefordítani, ezt a hibaüzenetet kapom:

! val _ = printVal ["kukucs"];
!         J
! Unbound value identifier: printVal
! Uncaught exception:
! Fail  "compile: error(s) in the source program"
Valami mást ront el.

Figyelem: A print mindig string típusú paramétert vár!


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