home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
language
/
examples
/
contfuns.lsp
< prev
next >
Wrap
Lisp/Scheme
|
1993-10-23
|
869b
|
26 lines
; Versuche zur Continuation function
(defun fk (n)
(if (zerop n) 1 (* n (fk (- n 1))))
)
; normale Fakultät
(defun fak (n &optional (cont #'identity))
(if (zerop n)
(funcall cont 1)
(fak (- n 1) #'(lambda (u) (funcall cont (* n u))))
) )
; Fakultät mit Continuation Function:
; (fak n cont) ergibt (funcall cont (fk n))
; Zum Wesen der Continuation Function:
; So eine Funktion ist in der Lage, noch auszuführende Anweisungen mitsamt
; korrektem Einsprungpunkt und den dazugehörigen korrekten statischen
; Variablenbindungen aufzunehmen. Die Verschachtelung dieser CF's entspricht
; genau dem Stackaufbau beim gewöhnlichen Abarbeiten.
; Eine CF IST also ein Stack. Er kann abgespeichert werden und wieder zur
; Ausführung gebracht werden. Damit hat man einen Mechanismus zum kontrol-
; lierten Umschalten zwischen Kontexten.