1

キーワードからコンパス方向文字列へのマップがあります。

(def dirnames {:n "North", :s "South", :e "East", :w "West"})

マップを関数として使用して名前を検索できます。

(dirnames :n)
;# = "North"

それは私には思われる

(map dirnames [:n :s])

ベクトルを返す必要があります

["North" "South"]

しかし、それは戻ります

[:n :s]

代わりは。(map) 呼び出しで「dirnames」の代わりにさまざまな関数を指定して、この半ダースの方法を試しましたが、常にキーワードのベクトルが返されます。

明らかに、基本的なものが欠けています。それは何ですか?

4

2 に答える 2

2

かっこを忘れているに違いない。次の関数定義を検討してください。

(defn foo [dirnames]
  map dirnames [:n :s])

ほとんど正しいように見えますが、副作用を評価mapし、次に副作用を評価しdirnames(どちらも何もしません)、最後に を返します[:n :s]。それは、あなたが説明しているような行動について私が考えることができる唯一の合理的な説明です.

于 2014-05-21T04:21:32.733 に答える
2

私のために働きます、私は質問を誤解していますか:

user> (def dirnames {:n "North", :s "South", :e "East", :w "West"})\
#'user/dirnames

user> (map dirnames [:n :s])
("North" "South")

また:

user> (map #(dirnames %) [:n :s])
("North" "South")
user> (mapv #(dirnames %) [:n :s])
["North" "South"]
于 2014-05-20T22:23:26.693 に答える