Ich habe überall nach der folgenden Funktionalität in Lisp gesucht und bin nirgendwohin gekommen:
finde den Index von etwas in einer Liste. Beispiel:
%Vor%Ersetzen Sie etwas an einer bestimmten Stelle in einer Liste. Beispiel:
%Vor%gibt ein Objekt an einem bestimmten Index zurück. Beispiel:
%Vor%Bis zu diesem Punkt habe ich es mit meinen eigenen Funktionen vorgetäuscht. Ich frage mich, ob ich nur mehr Arbeit für mich selbst erschaffe.
So habe ich Nummer 1 vorgetäuscht:
%Vor% Ich bin selbst ein Anfänger, aber Sie können setf
und nth
verwenden, um Nummer 2 und 3 zu machen.
Keine Ahnung von Nummer eins.
EDIT:
Für die Nummer eins können Sie Die Funktion position
. Ha.
Ich fand diese alle in diesem Index .
- finde den Index von etwas in einer Liste.
In Emacs Lisp und Common Lisp haben Sie die Funktion position
:
In Scheme ist hier eine rekursive Tail-Implementierung aus dem DrScheme -Dokument:
%Vor% Aber wenn Sie eine Liste als Sammlung von Slots zum Speichern strukturierter Daten verwenden, sollten Sie sich vielleicht defstruct
oder sogar irgendeine Art von Lisp-Objektsystem wie CLOS ansehen.
Wenn Sie Lisp lernen, sollten Sie sich Practical Common Lisp und / oder Der kleine Schemer .
Prost!
Jeremys Antworten sollten funktionieren; Aber das heißt, wenn Sie sich Code schreiben wie
(setf (nth i meine-Liste) new-elt)
Sie verwenden wahrscheinlich die falsche Datenstruktur. Listen sind einfach verkettete Listen, also sind sie O (N), auf die nach Index zugegriffen werden kann. Sie könnten besser mit Arrays arbeiten.
Oder vielleicht verwenden Sie Listen als Tupel. In diesem Fall sollten sie in Ordnung sein. Aber Sie wollen wahrscheinlich Accessoren benennen, damit jemand, der Ihren Code liest, sich nicht merken muss, was "nth 4" bedeuten soll. Etwas wie
%Vor%+2 für "Practical Common Lisp". Es ist eine Mischung aus einem Common Lisp Cookbook und einem hochwertigen Teach Yourself Lisp Buch.
Es gibt auch "Erfolgreiches Lisp" ( Ссылка und Ссылка ), die einige Lücken in" Practical Common Lisp "zu füllen schien.
Ich habe auch Paul Grahams "ANSI Common Lisp" gelesen, in dem es mehr um die Grundlagen der Sprache geht, aber eher um ein Referenzhandbuch.
Ich muss Thomas zustimmen. Wenn Sie Listen wie Arrays verwenden, dann wird das nur langsam (und möglicherweise peinlich) sein. Sie sollten also entweder Arrays verwenden oder bei den Funktionen bleiben, die Sie geschrieben haben, aber sie so "nach oben" verschieben, dass Sie die langsamen Listen später problemlos durch Arrays ersetzen können.
Tags und Links list functional-programming lisp