18. april 2003 - 20:40
Der er
11 kommentarer og
1 løsning
problem i sml
load "Int";
fun readln() = let val ln = TextIO.inputLine(TextIO.stdIn)
in String.substring(ln,0,(size ln)-1) end;
fun writeln x = (TextIO.output(TextIO.stdOut,x^"\n");
TextIO.flushOut(TextIO.stdOut));
fun write x = (TextIO.output(TextIO.stdOut,x);
TextIO.flushOut(TextIO.stdOut));
fun print_options () = writeln "(a) Indregistrering,(b)Afmelding,(c) Udskriv register, (d)Soegning : ";
fun readreg () = (write " Registrerings nummer ? "; readln());
fun readejer () = (write " Ejer ? "; readln());
fun readvaegt () = (write " Vaegt ? "; readln());
fun readfarve () = (write " Farve ? "; readln());
datatype Koeretoej = Bil of string*string*string*string;
fun valg "a" (reg) = indreg (reg)
|valg "b" (reg) = writeln (" er i b")
|valg "c" (reg) = writeln (" er i c")
|valg "d" (reg) = writeln (" er i d")
and indreg (reg) =
let val rn = readreg()
val e = readejer()
val v = readvaegt()
val f = readfarve()
in (Bil(rn,e,v,f)::reg) end
;
print_options();
fun run () = let val i = readln()
in valg(i,[]) end;
run();
quit();
I funktion indreg vil jeg gerne tilføje en Bil(... til min reg liste. Dette giver en type clash fejl, hvorfor ?
18. april 2003 - 21:00
#1
Din funktion valg har typen
string -> 'a -> unit
fordi writeln returnerer unit. Derfor skal indreg også have returtypen unit, men du har givet den typen Koeretoej list -> Koeretoej list.
Når du har fikset det problem, vil du have et problem med din run funktion: den forsøger at kalde en funktion (valg) af typen string * 'a list -> <enEllerAndenType>, hvilket ikke matcher din definition af valg-funktionen.
18. april 2003 - 21:06
#2
En anden ting er at du ikke behøver at bruge and, da de to funktioner ikke er indbyrdes afhængige. I stedet kan du placere definitionen af indreg før definitionen af valg.
18. april 2003 - 21:07
#3
el gnu>> hvis du har et kode forslag til at løse disse problemer ville jeg være meget taknemmelig
18. april 2003 - 21:15
#4
el gnu>> bor du tilfældigvis i kbh området, og har du lyst til at tjene lidt håndører ved at hjælpe mig med en opgave ?
18. april 2003 - 21:22
#5
Jeg bor i Kbh.-området, men jeg får stillet to store karaktergivende opgaver i næste uge, hvilket medfører at mit liv bliver sat på stand-by den næste måneds tid, så det kan ikke lade sig gøre. Men jeg skal nok lige komme med et forslag til noget kode.
18. april 2003 - 21:24
#6
Jeg tænkte i morgen, du får 100 per time sort
18. april 2003 - 21:41
#7
Desværre, jeg har ikke tid. I stedet håber jeg at følgende kan hjælpe dig lidt på vej.
Jeg har udkommenteret valgmulighederne b-d. De funktioner der skal kaldes ved disse valgmuligheder skal returnere noget data af typen Koeretoej list (ligesom indreg).
load "Int";
fun readln() = let val ln = TextIO.inputLine(TextIO.stdIn)
in String.substring(ln,0,(size ln)-1) end;
fun writeln x = (TextIO.output(TextIO.stdOut,x^"\n");
TextIO.flushOut(TextIO.stdOut));
fun write x = (TextIO.output(TextIO.stdOut,x);
TextIO.flushOut(TextIO.stdOut));
fun print_options () = writeln "(a) Indregistrering,(b)Afmelding,(c) Udskriv register, (d)Soegning : ";
fun readreg () = (write " Registrerings nummer ? "; readln());
fun readejer () = (write " Ejer ? "; readln());
fun readvaegt () = (write " Vaegt ? "; readln());
fun readfarve () = (write " Farve ? "; readln());
datatype Koeretoej = Bil of string*string*string*string;
fun indreg (reg) =
let
val rn = readreg()
val e = readejer()
val v = readvaegt()
val f = readfarve()
in
Bil(rn,e,v,f)::reg
end
;
fun valg ("a", reg) = indreg (reg)
(* | valg ("b", reg) = writeln (" er i b") *)
(* | valg ("c", reg) = writeln (" er i c") *)
(* | valg ("d", reg) = writeln (" er i d") *)
| valg (x, _) = raise Fail("Ugyldig indtastning! (" ^ x ^ ")")
;
fun run (regLst) =
let
val _ = print_options()
val i = readln()
in
run( valg(i, regLst) )
end
;
run([]);
quit();
18. april 2003 - 21:45
#8
el gnu>> helt ok. tusind tak for hjælpen, og 200 meget velfortjente points til dig.
18. april 2003 - 21:46
#9
np :-)
PS: hvad laver du opgaver til?
18. april 2003 - 21:54
#10
lidt gamle datalogi opgaver jeg øver, for at lære sml
18. april 2003 - 21:56
#11
Læser du på DIKU? Jeg er selv på andet semester der...
18. april 2003 - 21:58
#12
Læser på RUC, bliver forhåbentlig bachelor her til sommer
Kurser inden for grundlæggende programmering