0

私がマクロを持っているとしましょう、マクロの中に私はこれを持っています:

let[
    elements# //stuff// 
    #newlist (for [e# elements#] (if (number? e#) (**add e# to #newlist**)))
]

本当に単純なClojureに関する適切な情報を見つけるのに非常に苦労しているので、ここで質問します。上記のタスクを実行するには、何をする必要がありますか?これは可能だと思いますが、一番重要な部分はわかりません!

4

1 に答える 1

2

数字であるnewlistすべての要素を含むというリストを作成しようとしているようです。その場合は、次のように関数をelements使用できます。filter

(let
  [elements whatever
   newlist (filter number? elements)]
  do-stuff-with-newlist)

filter述語関数とリストを取り、述語が真の結果を返すアイテムを含む新しいリストを返します。

リストは不変であるため、 for ループ内のリストに追加するという最初のアイデアは機能しないことに注意してください。リストを保持する変数を for ループ内で再割り当てすることもできます ( のようなものです(set! my-list (cons e my-list))が、それは慣用的な Clojure コードではありません。逆にリストを作成することにもなります。

于 2013-01-20T14:29:42.447 に答える