Uppgift 10 ­ PM1/PK HT-02


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.

Efter denna laboration ska du kunna...

Före laborationen

Din inlämning

Överst i din fil ska följande finnas (inom kommentartecken):

Uppgiften

Problem 1

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

Problem 2

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

Problem 3

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

Problem 4

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.

Inlämning

Hämta ett formulär för att lämna in uppgiften genom att fylla i fälten nedan.

ID:
PIN:
formulär för inlämning

lhe@csd.uu.se The page has been accessed [an error occurred while processing this directive] times.

Valid HTML 4.01!