2012-08-06 23:49:06 +04:00
|
|
|
data O 0
|
|
|
|
data S 1
|
|
|
|
|
|
|
|
fun plus(x, y) = case x of {
|
|
|
|
O => y
|
2012-08-30 16:42:19 +04:00
|
|
|
| S(k) => S (plus(k, y))
|
2012-08-06 23:49:06 +04:00
|
|
|
}
|
|
|
|
|
2012-08-31 19:05:26 +04:00
|
|
|
fun fact(x) = factAux(x, 1)
|
|
|
|
|
|
|
|
fun factAux(x, acc) = case (x == 1) of {
|
|
|
|
0 => factAux(x-1, acc * x)
|
|
|
|
| 1 => acc
|
|
|
|
}
|
|
|
|
|
2012-08-06 23:49:06 +04:00
|
|
|
fun natToInt(x) = case x of {
|
|
|
|
O => 0
|
2012-08-07 00:44:19 +04:00
|
|
|
| S(k) => let y = natToInt(k) in y + 1
|
2012-08-06 23:49:06 +04:00
|
|
|
}
|
|
|
|
|
2012-08-30 16:42:19 +04:00
|
|
|
fun intToNat(x) = case x of {
|
|
|
|
0 => O
|
|
|
|
| _ => S (intToNat (x - 1))
|
|
|
|
}
|
|
|
|
|
2012-09-03 14:46:04 +04:00
|
|
|
fun sin(x) = foreign C Float "sin" (Float x)
|
|
|
|
|
2012-08-31 21:08:56 +04:00
|
|
|
fun main() = let val = natToInt(plus(intToNat(fact(6)), S(S(O)))) in
|
2012-09-03 14:46:04 +04:00
|
|
|
let sval = sin(1.0) in
|
|
|
|
%WriteString("Answer: " ++ %IntString(val)
|
|
|
|
++ " " ++ %FloatString(sval))
|
2012-08-31 19:05:26 +04:00
|
|
|
|