Skip to content

Instantly share code, notes, and snippets.

@sshine
Created September 24, 2013 14:46
Show Gist options
  • Save sshine/6685847 to your computer and use it in GitHub Desktop.
Save sshine/6685847 to your computer and use it in GitHub Desktop.
datatype bentSpil = BentSlutter of int
| BentSpiller of ingeSpil list
and ingeSpil = IngeSlutter of int
| IngeSpiller of bentSpil list
(* bent8 *)
val inge3 = IngeSpiller [ BentSlutter 0 ]
val inge4 = IngeSpiller [ BentSlutter 0, BentSlutter 1 ]
val inge5 = IngeSpiller [ BentSlutter 0,
BentSlutter 1,
BentSlutter 2 ]
val bent8 = BentSpiller [ inge3, inge4, inge5 ]
val bent' = BentSpiller []
(* A1 *)
(* bentSlutterSpil(bs) *)
fun bentSlutterSpil (BentSlutter _) = 1
| bentSlutterSpil (BentSpiller []) = 0
| bentSlutterSpil (BentSpiller (is::iss)) = ingesTur is +
bentSlutterSpil (BentSpiller iss)
and ingesTur (IngeSlutter _) = 0
| ingesTur (IngeSpiller []) = 0
| ingesTur (IngeSpiller (bs::bss)) = bentSlutterSpil bs +
ingesTur (IngeSpiller bss)
(* Alternativ *)
fun bentSlutterSpil (BentSlutter _) = 1
| bentSlutterSpil (BentSpiller iss) = ingesTurMange iss
and ingesTur (IngeSlutter _) = 0
| ingesTur (IngeSpiller bss) = bentSlutterMange bss
and ingesTurMange [] = raise Domain
| ingesTurMange [is] = ingesTur is
| ingesTurMange (is::iss) = ingesTur is + ingesTurMange iss
and bentSlutterMange [] = raise Domain
| bentSlutterMange [bs] = bentSlutterSpil bs
| bentSlutterMange (bs::bss) = bentSlutterSpil bs + bentSlutterMange bss
val bentSlutterSpil_test_bent8 = bentSlutterSpil bent8 = 6
(* 4T3 *)
fun startInge 0 = IngeSlutter 0
| startInge 1 = IngeSlutter 1
| startInge 2 = IngeSlutter 2
| startInge 3 = IngeSpiller [ startBent 0 ]
| startInge 4 = IngeSpiller [ startBent 1, startBent 0 ]
| startInge n = IngeSpiller [ startBent (n-3),
startBent (n-4),
startBent (n-5) ]
and startBent 0 = BentSlutter 0
| startBent 1 = BentSlutter 1
| startBent 2 = BentSlutter 2
| startBent 3 = BentSpiller [ startInge 0 ]
| startBent 4 = BentSpiller [ startInge 1, startInge 0 ]
| startBent n = BentSpiller [ startInge (n-3),
startInge (n-4),
startInge (n-5) ]
val startInge_test_1 = startInge 3 = inge3
val startBent_test_2 = startBent 8 = bent8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment