FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Probeklausur, 2.Teil

Probeklausur, 2.Teil 2002-01-26 21:00
Zaphod
Da wir am Montag ja die Probeklausur in der Großübung besprechen wollten habe ich die mal gemacht. Und als ich mir anschließend die Lösung ansah (der Link dazu war irgendwo in einem Topic zum ersten Teil), fiel mir auf, dass dort noch eine weitere Funktion definiert war, welche gar nicht gefordert war. Okay, das ist auch richtig, und macht die Arbeit wahrscheinlich auch leichter, aber wenn man die weglässt, und außerdem die Funktionen m und c in der letzten Aufgabe nicht global haben will (wozu sollte man auch?), dann sieht die Lösung so aus:
(define (anpassungsgerade liste) (letrec ((n (length liste)) (m (/ (- (* n (x*y-Summe liste)) (* (xsumme liste)(apply + (yliste liste)))) (- (* n (x**2-Summe liste)) (* (xsumme liste) (xsumme liste))))) (c (/ (- (apply + (yliste liste)) (* m (xsumme liste))) n))) (lambda (x) (+ (* m x) c)))) Kommentar dazu: Mit letrec definiere ich lokale Variablen, welche bis zur Schlussklammer vom letrec gültig sind (SKOPUS). Überhaupt verwende ich letrec und nicht let, da ich z.B. n und m für die Definition von c bereits benötige. Daher ist die Reihenfolge entscheident.
Die letzte Zeile ist schließlich das, was das letrec und damit auch die gesamte Funktion zurückgibt.

Re: Probeklausur, 2.Teil 2002-01-31 14:52
Christoph
kann das sein, dass statt letrec auch let* funktionieren
würde, bzw. dass dieser Fall genau so einer ist, wofür
let* existiert? Ansonsten Hut ab!
Ich habe auch in meinen Lösungen dazu in der Regel nie
was mit define gemacht, was ich nicht direkt zur Lösung
brauchte, sondern genauso alles mit letrec oder so gemacht.

Vorteil vom define ist allerdings, dass man die Lösungen
dann besser versteht. (Soviel auch zum Thema störende
Effizienz-lets)

Re: Probeklausur, 2.Teil 2002-01-31 21:58
Zaphod
Jupp, mit let* funktioniert das auch. Ich weiß gar nicht, ob es einen wesentlichen Unterschied dazwischen gibt, nur dass ich früher immer mit letrec gearbeitet habe.

Wenn man mit define arbeiten will und trotzdem c und m nicht global haben will, dann kann man auch in einem define ein weiteres define verwenden. Dieses ist dann wiederum nur innerhalb des äußeren define gültig.

Ich gehe aber nicht davon aus, dass solche Sachen wie Umgebungen Bestandteil der Klausur werden, unsofern ist es dafür egal, ob man die einzelnen Werte/Funktionen global oder lokal hält. Das wird erst bei größeren Programmen interessant, wozu wir aber vorerst noch nicht kommen werden.