Emacs Lisp: Wie summiere ich ungerade Zahlen in einer Liste?

7

Ich würde gerne elisps Analogon von:

finden %Vor%

Imperativer Weg:

%Vor%

Von Porting Common Lisp :

%Vor%

Verwenden von ' cl-* ' loop :

%Vor%

Gibt es einen idiomatischen Weg, dies zu tun (das erfordert keine cl-* -Pakete)?

Siehe auch:

  

Wie summiere ich eine Liste von Zahlen in Emacs Lisp?

    
jfs 26.02.2009, 16:46
quelle

3 Antworten

6
%Vor%     
rzab 26.02.2009, 18:01
quelle
14

Die idiomatische Methode ist die Verwendung der Funktionen und Makros in den cl -Paketen. Sie sind standardmäßig mit Emacs Lisp und es ist nichts falsch daran, sie zu verwenden.

Ich bezweifle, dass Sie einen Weg finden werden, dies so knapp und klar wie

zu tun %Vor%

Es gibt mehr funktionale Möglichkeiten, z. B.

%Vor%

, aber dies verwendet remove-if-not , das aus dem cl-seq -Paket stammt. Sie könnten eine Schleife von Hand schreiben:

%Vor%

, aber das verwendet dolist und incf , die beide im Paket cl-macs sind. Grundsätzlich können Sie das cl -Paket nicht umgehen: oddp selbst ist eine cl -Funktion!

Mein bester Versuch, absolut keine cl -Funktionen zu verwenden, ist dies:

%Vor%

aber es wäre absurd, dies in der Praxis anstelle der (loop ...) Version zu verwenden.

    
Gareth Rees 26.02.2009 19:19
quelle
2

Ich stimme der Antwort von Gareth Rees zu, aber wenn Sie die Funktionale Programmierung und Datenmanipulation stark in Ihrem Code verwenden, bin ich stark davon überzeugt empfehlen, die dash.el -Listen-API von Magnar Sveen zu installieren. Es hat lächerlich viele Funktionen zum Schreiben von prägnantem und elegantem Funktionscode. Übrigens wird es selbst ohne cl library geschrieben. Summieren ungerade Zahlen in einer Liste wäre dann:

%Vor%

-sum ist die Abkürzung für (-reduce '+ xs) . Funktionen, die mit 2 Bindestrichen beginnen, sind anaphorische Makros , sie setzen eine temporäre Variable frei. Anstatt beispielsweise (lambda (x) (= (mod x 2) 1)) an --filter zu übergeben, schreiben wir einfach (= (mod it 2) 1) , wobei it für eine lokale Variable verwendet wird.

    
Mirzhan Irkegulov 18.03.2014 11:14
quelle

Tags und Links