(S)ML-97 Examples
- [Basics] of SML.
- Hello world:
print "hello world\n" (* SML hello world program, LA 11/4/2005 *)
use: ne> sml Standard ML of ... - use "hello.sml"; [opening hello.sml] hello world val it = () : unit val it = () : unit -<CTRL>d - ne>
- cat:
open TextIO; (* i.e. the I/O library *) fun cat fileName = let fun f inS = if endOfStream inS then ( closeIn inS; print "
\n" ) else ( print (inputN(inS, 1)); f inS ) in f(openIn fileName) end; (* e.g. *) cat "cat.sml"; (* Copy file to std output, L.A., 11/4/2005 *) (* Also see I/O, Ch 4, *) (* Ullman "Elements of ML Programming" 1998 *) - [Big Ints], more than 32- or 64-bits.
- [High-Order Functions] accept functions as parameters and/or return functions as results.
- [Parser] (recursive descent) for expressions.
- [Lazy data types] are not standard in SML but they can be implemented in the language.
- [Structures, signatures, functors], struct, sig.
- [Continuations] can be used to implement non-standard control mechanisms.
- [Fixed-point operator, `Y'],
note that Y does not refer to itself within its body,
nor does the local
function Ggg ; one could rewrite Y to consist of only anonymous functions.Also see [λ/Y] . - [semantics.toy] direct denotational sematics of a toy imperative language expressed in SML-97
Further Reading:
- [λ-calculus].