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 回答