Skip to content

Instantly share code, notes, and snippets.

@sshine
Created September 24, 2013 14:17
Show Gist options
  • Save sshine/6685450 to your computer and use it in GitHub Desktop.
Save sshine/6685450 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 *)
local
val inge3 = IngeSpiller [ BentSlutter 0 ]
val inge4 = IngeSpiller [ BentSlutter 0, BentSlutter 1 ]
val inge5 = IngeSpiller [ BentSlutter 0,
BentSlutter 1,
BentSlutter 2 ]
in
val bent8 = BentSpiller [ inge3, inge4, inge5 ]
end
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment