Gibt es etwas, ähnlich wie return-Anweisung von C in Lisp?

Möchte ich zum implementieren einer Basis-Bedingung in eine rekursive Funktion geschrieben in Lisp, aber ich bin nicht in der Lage, dies zu tun, da es keine return-Anweisung in Lisp.

Mein Lisp-code basiert auf diesem C-code

if (n==0) return;

Wie implementiere ich dies in Lisp?

Lisp wird Häufig als eine funktionale Programmiersprache. Dies bedeutet, dass-Ausgänge Begriff/stdout als "Nebenwirkungen" und etwas (ohne so schwere negative Konnotation) unrein. Natürlich, eine beliebige Funktion in Common Lisp wird die Bewertung nach unten, um den Wert seiner finalmost form.
So etwas wie abort all dies, wenn n gleich 0 in einer Funktion, wir rufen Sie #'foo würden Sie wahrscheinlich verwenden Sie ein conditional - in den meisten Fällen wäre dies wohl die #'cond - Funktion, aber hier ist eine einfache Implementierung mit #', wenn, eine oft-built-in makro. (when (= n 0) (return-from foo nil)) Im oben genannten wenn in form des null kann ersetzt werden durch eine mehr komplizierte form, aber wenn es notwendig ist, werden Sie wahrscheinlich wollen, um den Bau einer Umsetzung von (cond) oder (case) etcetera.
lisp ist nicht mehr funktional als perl, mit Ausnahme einfacher zu zitieren. einige Probleme können nicht gelöst werden, in einem funktionalen Stil ohne dass in einer state-Maschine, die effektiv macht das gleiche wie unerlässlich code mit Ausnahme der Transformationen in die Umgebung erfolgen durch Kopie bei jedem Vorgang. eines dieser Probleme ist die partielle Reduzierung, wo Sie wollen, zu reduzieren, eine Liste von Schritten, die während der Transformation der Umwelt, aber halt reduzieren, wenn eine bestimmte Bedingung erfüllt ist; "zwingende" code effektiv abstrahiert die Komplexität dieser, während "rein funktionalen" macht es unpraktisch.
zum Beispiel, rein funktionalen Ansatz kämpft mit dem Ausdruck find the index of the string "hi" in my array xs, da reduzieren müssen gehen durch das ganze array selbst, nachdem er Sie findet, und filter gehen durch das ganze array und nicht einmal wissen, was zuerst ist, weil es soll eine ungeordnete Betrieb. Es gibt also keine Möglichkeit, um dieses problem zum Ausdruck korrekt, ohne dass in einer state-Maschine/stream/"Monade", und ein solcher Ansatz ist isomorph zur imperativen Ansatz.

InformationsquelleAutor Akash Babu | 2014-10-09

Schreibe einen Kommentar