Ich versuche, eine Liste mit dem Loop-Makro zu filtern. Wenn ich das tueFilterung mit sammeln in gemeinsamen Lisp Schleife Makro
(loop for x in (list 1 2 3 4) collect x)
Ich bekomme nur die gleiche Liste zurück, die Sinn macht. Ich möchte jedoch etwas tun, wie
(loop for x in (list 1 2 3 4) collect x if (evenp x))
und (2 4)
zurück zu bekommen, aber das ist nicht legal. Aus irgendeinem Grund kann ich die entsprechende Syntax für andere Dokumentation nicht finden. Ist das möglich?
„Ich habe nicht die entsprechende Syntax für diese auf andere Dokumentation finden.“ Die HyperSpec ist eine ziemlich vernünftige Dokumentation. Der Eintrag für [** loop **] (http://www.lispworks.com/documentation/HyperSpec/Body/m_loop.htm) enthält eine Grammatik, und die relevante Produktion ist 'conditional = = {if | wenn | es sei denn} form selectable-clause {und selectable-clause} * [else selected-clause {und selectable-clause} *] [end] '. Sie müssen nur die Reihenfolge ändern, um ** wenn (evenp x) sammeln x ** (obwohl, wenn Sie nicht ** sonst ** verwenden, dann ** wenn ** wäre idiomatisch). –