From 83986391d8b2e2a064a9c0c9b887c42da0592502 Mon Sep 17 00:00:00 2001 From: roca Date: Fri, 1 Feb 2013 17:28:06 -0500 Subject: [PATCH] 2.c --- hw2provided.sml | 47 +++++++++++++++++++++++++++++++++++++------- hw2providedTests.sml | 8 ++++++++ 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/hw2provided.sml b/hw2provided.sml index c3f3e3b..68f2fc6 100644 --- a/hw2provided.sml +++ b/hw2provided.sml @@ -96,19 +96,52 @@ exception IllegalMove (* put your solutions for problem 2 here *) +exception NoCardsFound fun card_color(card) = case card of - (Spades , _) => Black - |(Clubs , _) => Black + (Spades , _) => Black + |(Clubs , _) => Black |(Diamonds , _) => Red - |(Hearts , _) => Red + |(Hearts , _) => Red fun card_value(card) = case card of - (_ , Jack) => 10 + (_ , Jack) => 10 |(_ , Queen) => 10 - |(_ , King) => 10 - |(_ , Ace) => 11 - | (_,Num x) => x + |(_ , King) => 10 + |(_ , Ace) => 11 + |(_ , Num x) => x + + +fun same(c1 , c2 ) = + c1 = c2 + + +fun all_cards_except_option(pick, cards ) = + let fun f (xs,acc) = + case xs of + [] => acc + | x :: xs' => if same(pick,x) + then f(xs', acc) + else f(xs', x :: acc) + in + let + val cards_left = f(cards,[]) + in + if length(cards_left) = length(cards) + then NONE + else SOME cards_left + end + end + + +fun remove_card( deck , pick , ex) = + let + val cards_left = all_cards_except_option(pick,deck) + in + if cards_left = NONE + then raise ex + else getOpt(cards_left,[]) + end diff --git a/hw2providedTests.sml b/hw2providedTests.sml index 05b99bb..ac35561 100644 --- a/hw2providedTests.sml +++ b/hw2providedTests.sml @@ -42,3 +42,11 @@ card_value(Spades,Num 3) = 3; card_value(Clubs,Jack) = 10; card_value(Diamonds,Queen) = 10; card_value(Hearts,King) = 10; + +(* 2.c *) +remove_card([(Spades,Ace),(Spades,Jack)],(Clubs,Queen),NoCardsFound) = NoCardsFound; +remove_card([(Spades,Ace),(Spades,Jack)],(Spades,Queen),NoCardsFound) = NoCardsFound; +remove_card([(Spades,Ace),(Spades,Jack)],(Spades,Ace),NoCardsFound) = [(Spades,Jack)]; + + +