Kann ich das in Lisp machen?

7

Ich habe überall nach der folgenden Funktionalität in Lisp gesucht und bin nirgendwohin gekommen:

  1. finde den Index von etwas in einer Liste. Beispiel:

    %Vor%
  2. Ersetzen Sie etwas an einer bestimmten Stelle in einer Liste. Beispiel:

    %Vor%
  3. 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%     
helloandre 05.09.2008, 04:26
quelle

6 Antworten

23

Ich bin selbst ein Anfänger, aber Sie können setf und nth verwenden, um Nummer 2 und 3 zu machen.

%Vor%

Keine Ahnung von Nummer eins.

EDIT: Für die Nummer eins können Sie Die Funktion position . Ha.

%Vor%

Ich fand diese alle in diesem Index .

    
Jeremy Banks 05.09.2008, 04:33
quelle
11
  
  1. finde den Index von etwas in einer Liste.
  2.   

In Emacs Lisp und Common Lisp haben Sie die Funktion position :

%Vor%

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!

    
Sébastien RoccaSerra 10.09.2008 12:51
quelle
7

Antworten:

  1. (position item sequence & amp; key from-end (Start 0) Ende key test test-not)
    Ссылка

  2. (setf (elt Sequenzindex) Wert)

  3. (Elt-Sequenzindex)
    Ссылка
    HINWEIS: elt ist besser als nth, weil elt in jeder Sequenz arbeitet und nicht nur Listen

Eric Normand 15.09.2008 14:49
quelle
4

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%     
Please delete this account 05.09.2008 12:32
quelle
4

+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.

    
Will 15.09.2008 20:27
quelle
0

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.

    
ujh 10.09.2008 12:26
quelle