Skip to content

Instantly share code, notes, and snippets.

@avwhite
Created April 23, 2012 19:11
Show Gist options
  • Save avwhite/2473166 to your computer and use it in GitHub Desktop.
Save avwhite/2473166 to your computer and use it in GitHub Desktop.
Løsning på problem 2 i Haskell
--Data der definere elementerne i mængden B (mængden af børn)
--Kon (Køn) er enten dreng, D, eller pige, P
data Kon = D | P
--Dag er den ugedag barnet er født. deriving (Eq) gør at lighed er defineret for typen.
data Dag = Ma | Ti | On | To | Fr | Lo | So deriving (Eq)
--Man konstruere et barn ved funktionen B, der tager et Køn og en dag.
data Barn = B Kon Dag
--Nyttige funktioner til at operer på elementerne
erDreng :: Barn -> Bool
erDreng (B D _) = True
erDreng (B P _) = False
erDag :: Dag -> Barn -> Bool
erDag pd (B _ d) = pd == d
tirsdagsDreng b = erDreng b && erDag Ti b
--b er mængden af alle børn
b = [B D Ma, B D Ti, B D On, B D To, B D Fr, B D Lo, B D So,
B P Ma, B P Ti, B P On, B P To, B P Fr, B P Lo, B P So]
--b2 er det cartesiske produkt af b og b, b^2
b2 = [ (x,y) | x <- b, y <- b]
--omega er mængden af børne par, hvor mindst det ene er en tirsdags dreng
omega = [ (x, y) | (x,y) <- b2, tirsdagsDreng x || tirsdagsDreng y ]
--a er delmængden af omega, hvor begge børn er drenge
a = [ (x,y) | (x,y) <- omega, erDreng x, erDreng y]
--Udskriver længden(cardinaliteten) af a og længden af omega på den næste linje
--og giver dermed den brøk der er svaret.
main = do
putStrLn $ show (length a)
putStrLn $ show (length omega)
@avwhite
Copy link
Author

avwhite commented Apr 23, 2012

Nu er jeg ikke sikker på om det er rigtigt... Måske skal der stå

omega = [ (x, y) | (x,y) <- b2, tirsdagsDreng x ]

istedet for

omega = [ (x, y) | (x,y) <- b2, tirsdagsDreng x || tirsdagsDreng y ]

På linje 31

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment