Uppgift 10 måste lämnas senast tisdag 3/12 kl. 08:00. Lämna in den med hjälp av inlämningssystemet i slutet av denna sidan.
Överst i din fil ska följande finnas (inom kommentartecken):
Skriv en funktion query : string -> string
som givet en sträng
(som förväntas vara en fråga) skriver ut den på skärmen, läser in vad
användaren svarar (en rad) och returnerar svaret som en sträng.
Exempel:
- query("Vad heter du?"); Vad heter du? Kalle > val it = "Kalle\n" : string
Skriv en funktion save : string * string -> unit
som givet två
strängar - ett filnamn och en text - lägger till texten sist i filen med
det angivna namnet. Eventuella saker som redan ligger i filen ska alltså
fortsätta finnas där.
Exempel: Om filen testfil2
före anropet av
save
innehåller:
Dessa två rader finns från början.
...och man sedan kör save
så här:
- save("testfil2","En rad till!\n"); > val it = () : unit
...så skall testfil2
sedan innehålla:
Dessa två rader finns från början. En rad till
Skriv en funktion interview : string * string list -> unit
som
givet ett filnamn och en lista med frågor ställer dessa frågor (en och en)
till användaren, läser in svaren, och sparar både fråga och svar på den
angivna filen.
Här kan du få hjälp av funktionen query
från uppgift
1. Det är däremot olämpligt att använda save
från uppgift
2, även om det vore teoretiskt möjligt.
Notera att du vill att resultatet ska vara läsbart sedan. Ett enkelt sätt att åstadkomma detta är att spara varje fråga och varje svar på en egen rad.
Exempel på körning:
> interview("testfil3", ["Vad heter du?", "Adress?", "Ålder?"]); Vad heter du? Lars-Henrik Adress? Funbo Ålder? 42 - val it = () : unit
Filen testfil3
skall sedan innehålla:
Vad heter du? Lars-Henrik Adress? Funbo Ålder? 42
Skriv en funktion readPart : instream ->
string list
som från en inström läser in alla rader tills den
hittar en rad med ett ensamt utropstecken. Raderna ska returneras som en
lista av strängar. Utropstecknet skall inte returneras i listan.
Exempel: Om filen testfil4
innehåller:
En rad. En rad till! ! En luring... Ytterligare en rad ! Denna rad skall inte bli inläst. Inte denna heller.
...skall en körning av readPart
med en ström som är
öppnad mot testfil4
ge följande resultat:
- val i = openIn("testfil4"); > val i = <instream> : instream - readPart(i); > val it = ["En rad.\n", "En rad till!\n", "! En luring...\n", "Ytterligare en rad\n"] : string list - closeIn(i); > val it = () : unit
Observera att det är bra att stänga strömmen efter sig - speciellt om man vill prova funktionen flera gånger.
Hämta ett formulär för att lämna in uppgiften genom att fylla i fälten nedan.