Abrufen der ersten n Elemente einer Liste in Common Lisp?
Wie würde ich die ersten n
Elemente einer Liste?
CL-USER> (equal (some-function 2 '(1 20 300))
'(1 20))
T
Ich bin absolut sicher, dass dies Elementare, aber helfen Sie einem Bruder newb aus.
- Ich denke, "Küsse und Umarmungen" wird erschrecken, mehr Programmierer als auch Lisp!
- Ich Liebe dich beggs. xoxoxoxoxoxoxo
- Ich bin sicher, Freud hätte viel dazu zu sagen 🙂
- Ich glaube, es war Freud selbst, der sagte, dass in diesem schrecklichen Gebrechen geheilt werden konnte, durch den Empfang von Antworten auf Lisp-Fragen. Brauche ich eine doppelte Dosis von lispy, stat!
InformationsquelleAutor | 2009-11-12
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out die
SUBSEQ
Funktion.Kann es nicht sofort offensichtlich sein, aber in Lisp, die Indizierung von 0 startet, und du bist immer unter halb-offenen Intervalle, so dauert dies alle Elemente der Liste mit Indizes im Intervall [0, 2).
(loop for item in list for i from 1 to 10 do (something))
wo dassomething
könnte sammelnitem
.DEFCLASS
oderDEFSTRUCT
, und in solchen Fällen, wenn Sie nicht genügend Elemente, geworfen in den debugger sofort ist das beste, was Ihnen passieren kann.Die obige Antwort ist natürlich vollkommen richtig, aber beachten Sie, dass wenn Sie dies nur, um zu vergleichen, gegen eine andere Liste, es wäre mehr Leistung-effiziente gehen beide Listen in-statt, sondern als consing bis eine neue Liste, nur um zu vergleichen.
Beispielsweise im obigen Fall könnte man sagen:
Liebe,
Runterladen musste ein lisp-Kommandozeile... aber:
also:
(loop :repeat a :for x :in b :collect x)
als Ihre Funktion Körper. Viel einfacher ist.(butlast '(1 20 300) (- (list-length '(1 20 300)) 2))
Gemacht werden sollte, in eine Funktion/makro.
P. S. Auf dieser Seite nützlich sein könnten. Siehe Funktion 'Extrudieren'.