Avatar billede tigtak Nybegynder
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 ?
Avatar billede el_gnu Nybegynder
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.
Avatar billede el_gnu Nybegynder
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.
Avatar billede tigtak Nybegynder
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
Avatar billede tigtak Nybegynder
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 ?
Avatar billede el_gnu Nybegynder
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.
Avatar billede tigtak Nybegynder
18. april 2003 - 21:24 #6
Jeg tænkte i morgen, du får 100 per time sort
Avatar billede el_gnu Nybegynder
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();
Avatar billede tigtak Nybegynder
18. april 2003 - 21:45 #8
el gnu>> helt ok. tusind tak for hjælpen, og 200 meget velfortjente points til dig.
Avatar billede el_gnu Nybegynder
18. april 2003 - 21:46 #9
np :-)

PS: hvad laver du opgaver til?
Avatar billede tigtak Nybegynder
18. april 2003 - 21:54 #10
lidt gamle datalogi opgaver jeg øver, for at lære sml
Avatar billede el_gnu Nybegynder
18. april 2003 - 21:56 #11
Læser du på DIKU? Jeg er selv på andet semester der...
Avatar billede tigtak Nybegynder
18. april 2003 - 21:58 #12
Læser på RUC, bliver forhåbentlig bachelor her til sommer
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester