FB18 - Das Forum für Informatik

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

Multipliezieren mit Zahl und Liste?

Multipliezieren mit Zahl und Liste? 2002-02-15 11:34
Popcorn
Ich kann bei mir weder in Dr.Scheme noch in SCM Scheme eine Zahl mit einer Liste multiplizieren [etwa (* 4 (5))]. Deswegen habe ich auch ein bißchen (Ausführungs und Verständnis) Probleme mit der Musterlösung zu 4(d) der Probeklausur.

(define (x*y-Summe pairs)
(apply +
(map * (xliste pairs) (yliste pairs))))

Die YListe wird aber mit (map cdr pairs) zusammengebaut, bzw. enthält wegen dem cdr ja immer geklammerte Elemente. Was mache/verstehe ich da falsch?

Re: Multipliezieren mit Zahl und Liste? 2002-02-15 11:40
TriPhoenix
Also bei dotted pairs, also nicht (1 2) als Liste sondern (1 . 2) liefert cdr keine liste mehr zurück, zumindest macht mein dr. scheme das einwandfrei

Re: Multipliezieren mit Zahl und Liste? 2002-02-15 11:56
Popcorn
triller…

okay…
danke…
gna…

Re: Multipliezieren mit Zahl und Liste? 2002-02-15 19:38
TriPhoenix
Hab übrigens im revised scheme-report noch einiges über listen und dotted pairs gefunden…zum verständnis von car und cdr was denke ich ganz gut ist schon weil sie in der probeklausur drankommen:
—–
car und cdr arbeiten nur mit dotted pairs. Ein dotted pair ist soetwas: (a . b) wobei a und b alles mögliche sein können. car liefert a und cdr liefert b. Ein dotted pair (a . b) ist keinesfalls mit (a b) zu verwechseln..denn wie wir wissen liefert bei der Liste (a b) cdr nicht b sondern (b) zurück.
d.h. (a b) scheint äquivalent zu (a . (b))

(cdr (b)) allerdings liefert () zurück, d.h. insgesamt ist
(a b) äquivalent zu (a . (b . ()))

daher liefert cdr dann (b . ()) zurück, was in Kurzform als (b) darstellbar ist.

Eine weitere Konsequenz des ganzen ist, dass (a b) nicht gleich (a . b) ist.
—–
Besonders schön ist das Problem mit dotted pairs auch, wenn man mit cons listen baut. Cons baut nämlich auch nur ein dotted pair. D.h. wnen man die liste (1 2) erzeugen will., kommt man mit (cons 1 2) nicht weit…da bekommt man nämlich (1 . 2). Um die Liste (1 2) zu erzeugen muss man entweder (list 1 2) bvenutzen oder

(cons 1 (list 2))
was als ergebnis
(1 . (2 . '())) hat bzw. in kurzform (1 2)
—–
So vielelicht erklärt das, warum bei einigen Übungen ständig dotted pairs auftreten…vielkleicht hats ja ienigen geholfen, mir jedenfalls sehr.

PS: Für alle die noch blättern wollen und kein Heft abbekommen haben:
http://www.informatik.uni-hamburg.de/RZ/software/sprachen/scm/r5rs_toc.html