Original von Red Eye
Nabend....
also, ich hab das so gelöst:
(define f
(let ((a 0.5)) ;definere a=0.5
(lambda () ; gebe lambda als Prozedur ohne Parameter zurück
(begin ;Starte Rumpf der lambda Prozedur
(set! a (* -1 a)) ;Wechsle den Wert von a (d.h. mach aus a=0.5 a=-0.5)
a ;gebe den neuen Wert von a zurück
)
)
)
)
(- (f) (f))
Somit kann man erkennen, ob es von rechts oder von links ausgeführt wird...
Ich hab's etwas anders gemacht. Die Differenz soll ja immer 1 sein. Also hab ich einen Zähler, der bei jedem Aufruf von (f) um 1 runtergezählt wird. So kann man zwischendurch auch (f) aufrufen, ohne dass es was am Ergebnis ändert

Auch wenn's nicht gefordert war, das fiel mir halt zuerst ein ;-)