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?
- data Address = Address {firstname :: String, lastname :: String, age :: Int}
- adr = Address {firstname = "Terje", lastname = "Pedersen", age = 31}
- showAddress :: Address -> String
- showAddress a = firstname a ++ " age is " ++ show (age a)
- showAddress2 :: Address -> String
- showAddress2 Address {lastname = ln} = "Last name: " ++ ln
- main = do
- print $ showAddress adr
- 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:
- model student:
- part name = "unknown"
- part age = 0
- part score = 0
- my_student_model = model student ( name = "Sandy P. Schmoe", age = 16, score = 75 )
- if my_student_model.score >= 90 then:
- print "The student is going to Disneyland! Hooray!"
- but if my_student_model.score >= 80 then:
- print "The student is getting a new Superman Returns toy!"
- otherwise:
- 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:
- data Student = Student {
- name :: String,
- age :: Int,
- score :: Int
- }
- my_student_model = Student { name = "Sandy P. Schmoe", age = 16, score = 75 }
- main =
- if score my_student_model >= 90 then
- print "The student is going to Disneyland! Hooray!"
- else if score my_student_model >= 80 then
- print "The student is getting a new Superman Returns toy!"
- else
- 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:
- student = Student { name = "unknown", age = 0, score = 0 }
- my_student_model = student { name = "Sandy P. Schmoe", age = 16, score = 75 }
Relevante innlegg/sider/lenker
| Innlegg: | På forsiden: |




0 tilbaketråkk: