(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].