Looking for common-lisp Keywords? Try Ask4Keywords

common-lispRekursion


Bemerkungen

Lisp wird häufig in Bildungskontexten eingesetzt, in denen die Schüler rekursive Algorithmen verstehen und implementieren lernen.

Produktionscode, der in Common Lisp oder Portable Code geschrieben wurde, hat mehrere Probleme mit der Rekursion: Sie verwenden keine implementierungsspezifischen Funktionen wie die Optimierung von Rückrufen , was oft eine Rekursion ganz erforderlich macht. In diesen Fällen Implementierungen:

  • Üblicherweise haben Sie eine Rekursionstiefenbegrenzung aufgrund von Begrenzungen bei Stapelgrößen. Rekursive Algorithmen funktionieren daher nur für Daten begrenzter Größe.
  • Bieten Sie nicht immer eine Optimierung von Abrufaufrufen an, insbesondere in Kombination mit Operationen mit dynamischen Bereichen.
  • Bieten Sie nur bei bestimmten Optimierungsstufen eine Optimierung der Rückrufe an.
  • Stellen Sie normalerweise keine Rückrufoptimierung bereit.
  • Normalerweise bieten keine Endaufruf Optimierung auf bestimmten Plattformen. Beispielsweise können Implementierungen in der JVM dies möglicherweise nicht tun, da die JVM selbst keine Tail Call-Optimierung unterstützt .

Das Ersetzen von Tail Calls durch Sprünge macht das Debuggen normalerweise schwieriger. Durch das Hinzufügen von Sprüngen werden Stack-Frames in einem Debugger nicht verfügbar. Als Alternative bietet Common Lisp:

  • Iterationskonstrukte wie DO , DOTIMES , LOOP und andere
  • Funktionen höherer Ordnung wie MAP , REDUCE und andere
  • Verschiedene Kontrollstrukturen, einschließlich Low-Level, go to

Rekursion Verwandte Beispiele