Hur man skriver sin egen IO?

58 views
Skip to first unread message

Aangkat

unread,
Oct 20, 2012, 4:14:42 AM10/20/12
to introduction-to-funct...@googlegroups.com
hur skriver man putStr och getChar ?

det är ju jätte svårt tycker jag hur man skriver sin egen IO funktion :/

Anders

unread,
Oct 20, 2012, 4:26:16 AM10/20/12
to introduction-to-funct...@googlegroups.com
Ja det är svårt och jag tror inte ni behöver kunna göra det än... Eller är det med på någon gammal tenta?

Om du är nyfiken hur man kan göra se föreläsning 3 från kursen Advanced Functional Programming:

http://www.cse.chalmers.se/edu/course/afp/lectures.html#lecture3

Aangkat

unread,
Oct 20, 2012, 5:49:20 AM10/20/12
to introduction-to-funct...@googlegroups.com
hahahah lol.
Jag vill bara få med förståelse hur IO funkar. Jag tänkte om jag gör egna funktioner, då blir jag bättre.
Men om det är advance stuff, då skippar jag det.

Tack så hemsk mycker för svaret Anders :D

Aangkat

unread,
Oct 21, 2012, 5:40:35 AM10/21/12
to introduction-to-funct...@googlegroups.com
getCurrentDirectory


setCurrentDirectory

jag förstår verkligen ingeting på senaste tentan hur dessa två funkar?

Anders

unread,
Oct 21, 2012, 5:49:43 AM10/21/12
to introduction-to-funct...@googlegroups.com
Det står i uppgiften att:

  • getCurrentDirectory :: IO FilePath, which tells you where in a file system you are

setCurrentDirectory :: FilePath -> IO (), which sets the current directory to the specified directory.

(The above three functions are all available in the standard module System.Directory and free for you to use here.)

Alltså behöver du inte skriva dom själv, bara använda dom. Och dom gör precis vad som står i uppgiften... Om du är i en mapp och inte vet vilken det är så kan du på linux köra pwd (print working directory), getCurrentDirectory gör precis samma sak, dvs den skriver ut vilken mapp du är i. setCurrentDirectory å andra sidan gör precis samma sak som cd (change directory), dvs den byter mapp åt dig.


Aangkat

unread,
Oct 21, 2012, 7:00:49 AM10/21/12
to introduction-to-funct...@googlegroups.com
jag fattar nu. 
det jag inte förstod var facit hur ni skrev det?

Men jag tror jag fattar bättre nu :)

Aangkat

unread,
Oct 21, 2012, 8:49:05 AM10/21/12
to introduction-to-funct...@googlegroups.com
så jag löste uppgiften nu :D
Det gick mycket bättre när man fattar frågan :)

Men jag har en fråga till.
Varför är det viktigt att gå tillbaka till man var från början?

Om det inte stod i tipset, skulle jag ha misslyckat grovt.

Skulle vara snällt om du förklarade :)

Anders

unread,
Oct 21, 2012, 5:46:22 PM10/21/12
to introduction-to-funct...@googlegroups.com
Man måste ju veta var man ska skriva filerna, så antingen går man tillbaka till rätt ställe när man skrivit några filer eller så håller man alltid på var man är när man skriver filerna... Om du fortfarande inte förstår varför skriv en version av imprint som inte håller reda på var man är/går tillbaka dit man var från början och se vad som händer... :)

Lycka till på tentan!
Anders

Anders

unread,
Oct 21, 2012, 5:46:50 PM10/21/12
to introduction-to-funct...@googlegroups.com
man håller alltid reda på var man är*

Aangkat

unread,
Oct 22, 2012, 10:25:27 AM10/22/12
to introduction-to-funct...@googlegroups.com
tack Anders :D
HAHHAHA skit kul att detta kom på tentan.
Och jag kunde det :D
Men en sista fråga för denna. 

I facit står det så här.


imprint :: File -> IO ()
imprint (File file) =
  do writeFile file ""

imprint (Dir name files) =
  do createDirectory name
     here <- getCurrentDirectory
     setCurrentDirectory name
     sequence_ [ imprint file | file <- files ]
     setCurrentDirectory here


Men frågan är ju för Filesystem! Inte bara file.

Så jag gjorde här i slutet.

imprintSystem :: Filesystem -> IO ()
imprintSystem xs = sequence_ [imprint x | x <-xs ]


ska det inte vara så egentligen?
Annars har jag misslyckat och ska gråta ^_^

Anders

unread,
Oct 22, 2012, 10:37:30 AM10/22/12
to introduction-to-funct...@googlegroups.com
Ja, du har rätt. imprint ska ha typen FileSystem -> IO (), men facit är fel eftersom imprint där har typen File -> IO (), så din imprintSystem är korrekt. Bra att du såg det! :)

Aangkat

unread,
Oct 22, 2012, 10:48:18 AM10/22/12
to introduction-to-funct...@googlegroups.com
yeahhhhhhhhhhhhhhhh!!!!!!!!!
Jag sa det innan i forum :D
Fan va gött få en 4 om jag inte har misslyckat på första delen.

Skit nöjd. 
Vill Tack dig ännu en gång. Skulle ha failat grov annars :D
Reply all
Reply to author
Forward
0 new messages