FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

SE 3 (F.P.) Frage zum Programm S.280

SE 3 (F.P.) Frage zum Programm S.280 2009-12-30 21:06
Stefan1971HH
Hallo,
bei dem Programm

( define (vieleTangenten2 f)

;zeichne f und mehrere Tangenten

(graph-fun f ’red )
(map (curry zeichneTangente f) ’ ( 1 2 3 4) ’ (blue green purple cyan ) ) )

bereitet mir weniger das Currying Kopfzerbrechen, als der Umstand, dass die letzten beiden Zeilen
eine Sequenz zweier voneinander unabhängiger Funktionsaufrufe darzustellen scheinen.

Das geht doch normalerweise nicht, weil eine Funktion genau einen Rückgabewert liefern muss..?
Entweder geht dies hier doch oder ich lese das Programm falsch.

Bin für Hinweise dankbar.

Stefan

RE: SE 3 (F.P.) Frage zum Programm S.280 2009-12-31 08:32
garou
(graph-fun f  ’red )
(map (curry zeichneTangente f) ’ ( 1 2 3 4) ’ (blue green purple cyan ) ) )

Das geht doch normalerweise nicht, weil eine Funktion genau einen Rückgabewert liefern muss..?
Entweder geht dies hier doch oder ich lese das Programm falsch.

Da ich nicht sicher bin, dein Problem zu verstehen, hier zwei Antworten.

1) Das "Problem" ist, daß da zwei voneinander unabhängige Funktionsaufrufe stehen (Dies scheint''s zu sein).
Antwort: "Problem"? Die interagieren vielleicht nicht miteinander, aber… na und? Ist ja kein Funktionsaufruf, sondern zwei separate Eingaben an die REPL. Falls das ganze innerhalb eines (let) vorkommen sollte (He du, hassu' ma link zu Übungszettel für 'nen armen Nichtübungsgruppenteilnehmer?), ist der Rückgabewert der Rückgabewert des letzten Funktionsaufrufs, siehe R5RS.

> (+ 1 2) 3 > (+ 2 4) 6
2) Im Falle von Unverständnis, was das mit dem curry-Aufruf im map auf sich hat:
> (lambda (x y) (+ x y)) #{Procedure 8518} > (map (lambda (x y) (+ x y)) '(1 2 3) '(2 4 6)) '(3 6 9)