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%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. : -)
Die gewünschte Funktion ist remove-if-not
, die eingebaut ist.
Wenn Sie das Gefühl haben, etwas mit Listen neu zu erfinden, sind Sie es wahrscheinlich. Überprüfen Sie die Hyperspec, um zu sehen.
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.
Tags und Links common-lisp