Diskussion:Steel Bank Common Lisp

Letzter Kommentar: vor 18 Jahren von 83.181.79.49 in Abschnitt Kompilieren

Kompilieren

Bearbeiten

Ich habe ich eine Funktion ackermann geschrieben, die nun den Wert von 4,2 berechnen soll. Leider geht das nicht in emacs (auch wenn ich gewisse Umgebungsvariablen erhöhe), daher habe ich es mit sbcl probiert. ein #~ sbcl <ackermann.lisp bringt mir:

ACKERMANN

  • Control stack guard page temporarily disabled: proceed with caution

debugger invoked on a SB-KERNEL::CONTROL-STACK-EXHAUSTED in thread 3084453568:

 Control stack exhausted (no more space for function call frames).  This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):

 0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::CONTROL-STACK-EXHAUSTED-ERROR) 0]

was mach ich falsch?

--> siehe in wiki Ackermannfunktion: Abschnitt "Funktionswert a(4,2)"

mit clisp würde ich gerne arbeiten, allerdings verrät mir die manpage nicht, wie :-/

--Feuervogel 11:44, 12. Apr 2006 (CEST)

Fehler im Programm? Die Wikipedia ist aber nicht der richtige Ort für solche Fragen, da hier eigentlich Artikel diskutiert werden sollen und keine Probleme. Achso. Kannst du clisp nicht starten und dann auf der Eingabe einfach (load "ackermann.lisp") nutzen? 83.181.79.49 11:29, 2. Mai 2006 (CEST)Beantworten

-- so gehts Du musst ackermann.lisp kompilieren und nicht einfach in sbcl reinpipen. Entweder: von sbcl aus: (compile-file "ackermann.lisp") (load "ackermann.fasl") oder du lädst ackermann.lisp ganz normal, wie oben, aber compilierst vor funktionsausfruf erst die funktion mit (compile 'ACKERMANN) (ACKERMANN)

sbcl muss nämlich die tail-recursion in iterationen optimieren damit der stack nicht gesmasht wird... 85.176.10.30