Common Lisp Idiom - gibt es einen besseren Weg?

7

Ich merke, dass ich die ganze Zeit so etwas mache. Ich habe darüber nachgedacht, ein Makro / eine Funktion zu schreiben, um so etwas einfacher zu machen, aber mir fällt ein, dass ich das Rad wahrscheinlich neu erfinde.

Gibt es eine bestehende Funktion, mit der ich diese Art von Dingen prägnanter erreichen kann?

%Vor%     
r00k 01.09.2008, 22:50
quelle

3 Antworten

23

Es gibt mehrere integrierte Möglichkeiten, dies zu tun. Ein Weg wäre:

%Vor%

Und noch eins:

%Vor%

Und noch eins:

%Vor%

Etc ... Es gibt auch SERIES und Iterate . Die Iterate-Version ist identisch mit der LOOP-Version, aber die SERIES-Version ist interessant:

%Vor%

Also, ja, Sie werden sehr wahrscheinlich einige Rad neu erfinden. : -)

    
Luís Oliveira 02.09.2008, 04:37
quelle
6

Die gewünschte Funktion ist remove-if-not , die eingebaut ist.

%Vor%

Wenn Sie das Gefühl haben, etwas mit Listen neu zu erfinden, sind Sie es wahrscheinlich. Überprüfen Sie die Hyperspec, um zu sehen.

Nathan Shively-Sanders 17.09.2008 14:48
quelle
-2

Es gibt verschiedene Möglichkeiten, dies zu tun. Erstens, und wahrscheinlich am einfachsten, können Sie es rekursiv tun.

%Vor%

Sie könnten es auch mit mapcar und reduce machen, wobei Ersteres eine Liste mit fehlerhaften Elementen erstellen kann, die durch nil ersetzt werden, und letzteres kann verwendet werden, um nil herauszufiltern.

Entweder wäre ein guter Kandidat für ein "Filter" -Makro oder eine -Funktion, die eine Liste übernimmt und die durch ein Prädikat gefilterte Liste zurückgibt.

    
Chris Hanson 01.09.2008 23:19
quelle

Tags und Links