Record med navngitte felt

Jeg har sett på record i Haskell og da spesielt de med navngitte felt. Har også funnet ut at et forslag til nytt språk på en blogg egentlig nesten kunne skrives i Haskell.

I Haskell blir disse navngitte feltene gjort om til funksjoner som tar en record som parameter slik at en kan skrive firstname adr for å ta ut fornavnet fra adr som vist i showAddress.

Den andre måten å hente ut på er vist i showAddress2 hvor en bruker pattern matching. Er det flere måter?

  1. data Address = Address {firstname :: String, lastname :: String, age :: Int}
  2. adr = Address {firstname = "Terje", lastname = "Pedersen", age = 31}
  3. showAddress :: Address -> String
  4. showAddress a = firstname a ++ " age is " ++ show (age a)
  5. showAddress2 :: Address -> String
  6. showAddress2 Address {lastname = ln} = "Last name: " ++ ln
  7. main = do
  8. print $ showAddress adr
  9. print $ showAddress2 adr

I forbindelse når jeg har sittet å lekt meg men syntax til mitt eget lille språk Minky så kom jeg over blogg-innlegget Designing a simple programming language

Bloggerens forslag ser slik ut:

  1. model student:
  2. part name = "unknown"
  3. part age = 0
  4. part score = 0
  5. my_student_model = model student ( name = "Sandy P. Schmoe", age = 16, score = 75 )
  6. if my_student_model.score >= 90 then:
  7. print "The student is going to Disneyland! Hooray!"
  8. but if my_student_model.score >= 80 then:
  9. print "The student is getting a new Superman Returns toy!"
  10. otherwise:
  11. print "The student is going to be tutored over the summer =("

Jeg har prøvd å skrive det så likt som mulig i Haskell og kom da frem til følgende:

  1. data Student = Student {
  2. name :: String,
  3. age :: Int,
  4. score :: Int
  5. }
  6. my_student_model = Student { name = "Sandy P. Schmoe", age = 16, score = 75 }
  7. main =
  8. if score my_student_model >= 90 then
  9. print "The student is going to Disneyland! Hooray!"
  10. else if score my_student_model >= 80 then
  11. print "The student is getting a new Superman Returns toy!"
  12. else
  13. print "The student is going to be tutored over the summer =("

Mao ikke så veldig store forskjellen nei. Går det an å gjøre det enda likere? Vet at jeg har droppet default verdiene, men det kunne vel vært skrevet som:

  1. student = Student { name = "unknown", age = 0, score = 0 }
  2. my_student_model = student { name = "Sandy P. Schmoe", age = 16, score = 75 }

Tilbaketråkk url: klikk her!
Stikkord: haskell
Fb

Relevante innlegg/sider/lenker

0 tilbaketråkk: