Ich würde gerne elisps Analogon von:
finden %Vor%Imperativer Weg:
%Vor%Von Porting Common Lisp :
%Vor% Verwenden von ' cl-*
' loop
:
Gibt es einen idiomatischen Weg, dies zu tun (das erfordert keine cl-*
-Pakete)?
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:
, 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:
aber es wäre absurd, dies in der Praxis anstelle der (loop ...)
Version zu verwenden.
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:
-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.