~$ sml
Standard ML of New Jersey, Version 110.0.3, January 30, 1998 [CM; autoload enabled]
- 2+3;
val it = 5 : int
- 2+3*5;
val it = 17 : int
- 5>=3;
val it = true : bool
- 5>=6;
val it = false : bool
- 17 div 3;
val it = 5 : int
- 17 mod 3;
val it = 2 : int
- 17.0/3.0;
val it = 5.66666666667 : real
- 17.0/3;
stdIn:28.1-28.7 Error: operator and operand don't agree [literal]
  operator domain: real * real
  operand:         real * int
  in expression:
    17.0 / 3
- 17.0/real(3);
val it = 5.66666666667 : real

- "hello";
val it = "hello" : string
- "hello">="goodbye";
val it = true : bool
- "hello">="help";
val it = false : bool

- fun square(n) = n*n;
val square = fn : int -> int
- square(6);
val it = 36 : int
- square(square(square(2)));
val it = 256 : int

- abs(-3);
stdIn:37.5 Error: expression or pattern begins with infix identifier "-"
stdIn:37.4-37.8 Error: operator and operand don't agree [literal]
  operator domain: 'Z * 'Z
  operand:         int
  in expression:
    - 3
- fun abs(n) = if n>=0 then n else 0-n;
val abs = fn : int -> int
- abs(-3);
stdIn:38.5 Error: expression or pattern begins with infix identifier "-"
stdIn:38.4-38.8 Error: operator and operand don't agree [literal]
  operator domain: 'Z * 'Z
  operand:         int
  in expression:
    - 3
- abs(5-8);
val it = 3 : int

- fun fib(n) = if n=0 orelse n=1 then 1 else fib(n-1)+fib(n-2);
val fib = fn : int -> int
- fib(0);
val it = 1 : int
- fib(1);
val it = 1 : int
- fib(2);
val it = 2 : int
- fib(3);
val it = 3 : int
- fib(4);
val it = 5 : int
- fib(25);
val it = 121393 : int

- fun power(x,n) = if n=0
=                     then 1
=                     else x*power(x,n-1);
val power = fn : int * int -> int
- power(3,4);
val it = 81 : int
- power(1.5,3);
stdIn:18.1-18.13 Error: operator and operand don't agree [tycon mismatch]
  operator domain: int
  operand:         real * int
  in expression:
    power (1.5,3)

- fun square(x:real) = x*x;
val square = fn : real -> real
- square(2.4);
val it = 5.76 : real
-  fun power(x,n) = if n=0
=                      then 1.0
=                   else if (n mod 2 = 0)
=                      then square(power(x,n div 2))
=                   else
=                      x*square(power(x,n div 2));
GC #0.0.0.0.4.307:   (0 ms)
val power = fn : real * int -> real
- power(1.5,3);
val it = 3.375 : real
- power(1.00001,45);
val it = 1.00045009901 : real
- power(1.00001,4500);
val it = 1.04602762455 : real
-  power(1.00001,450000);
val it = 90.0151059535 : real


- [5,7,5,3];
val it = [5,7,5,3] : int list
- hd [5,7,5,3];
val it = 5 : int
- tl [5,7,5,3];
val it = [7,5,3] : int list
- tl (tl [5,7,5,3]);
val it = [5,3] : int list
- 5::[7,5,3];
val it = [5,7,5,3] : int list
- 5::7::5::[3];
val it = [5,7,5,3] : int list
- 5::7::5::3::[];
val it = [5,7,5,3] : int list

- [3,4] = [3,4];
val it = true : bool
- [3,4] = [4,3];
val it = false : bool
- [3,4] = [4,3,8];
val it = false : bool

- fun length(x) = if null(x)
=                   then 0
=                   else 1+length(tl(x));
val length = fn : 'a list -> int
- length([4,5,4,5,4]);
val it = 5 : int
- length([]);
val it = 0 : int
- length(7);
stdIn:105.1-105.10 Error: operator and operand don't agree [literal]
  operator domain: 'Z list
  operand:         int
  in expression:
    length 7

- fun sum(x) = if null(x)
=                 then 0
=                 else hd(x)+sum(tl(x));
val sum = fn : int list -> int
- sum([1,2,3,4,5,6,7,8,9,10]);
val it = 55 : int

- fun prod(x) = if null(x)
=                  then 1
=                  else hd(x)*prod(tl(x));
val prod = fn : int list -> int
- prod([2,5,7,11]);
val it = 770 : int
- prod([2,2,2,2,2,2,2,2,2,2]);
val it = 1024 : int

<ctrl d>
$