So fügen Sie mehrere Elemente zu einer Liste in Emacs lisp hinzu

8

In Emacs lisp gibt es add-to-list , um ein einzelnes Element zu einer Liste hinzuzufügen (wenn es nicht schon existiert).

Anstelle von einem möchte ich mehrere Elemente hinzufügen. Außerdem möchte ich doppelte Elemente nicht filtern, sondern sie trotzdem zur Liste hinzufügen.

Zur Zeit habe ich die folgende Funktion implementiert:

%Vor%

Die Funktion macht, was ich will, aber ich frage mich, ob sowas (oder besser) schon in Emacs Lisp existiert. Ich möchte das Rad nicht neu erfinden.

Update 1 : Stefan weist darauf hin, dass dieser Code nicht mit lexikalischen Scoping funktioniert. Gibt es eine Möglichkeit, es zum Laufen zu bringen?

Update 2 : Früher dachte ich, dass doppelte Filterung in Ordnung wäre, aber das ist es nicht. Ich brauche die Duplikate.

    
Viktor Rosenfeld 22.06.2014, 22:33
quelle

3 Antworten

4

Dies wäre fast gleichwertig, aber schneller, da es keine Kopie der ursprünglichen Liste vor dem Anhängen der neuen Elemente erstellt.

%Vor%

1 append kopiert nicht das letzte Element, sondern verwendet es direkt als das Ende der neuen Liste, so dass das Teil identisch ist. Wenn es jedoch zusätzliche Verweise auf das ursprüngliche Listenobjekt (oder einen Teil davon) gibt, dann wird ein funktionaler Unterschied zwischen dem Kopieren dieser Liste (über append ) und nur dem Erweitern (mit% Code%). Welches dieser beiden Ergebnisse Sie tatsächlich wollen, liegt natürlich bei Ihnen.

    
phils 23.06.2014, 00:44
quelle
4

Ich habe Folgendes in meiner init-Datei, die das Hinzufügen mehrerer Elemente ermöglicht. Ich weiß nicht, wie effizient es ist, die hinzuzufügenden Elemente zu durchlaufen, aber es verhindert doppelte Elemente.

%Vor%     
Jonathan Leech-Pepin 23.06.2014 19:33
quelle
2

Wenn es Ihnen nicht wichtig ist zu bestellen:

%Vor%

Das letzte Argument von list* wird zum Ende der resultierenden Liste.

    
gsg 23.06.2014 07:20
quelle

Tags und Links