映射键上的Clojure(映射)

映射键上的Clojure(映射),clojure,lighttable,Clojure,Lighttable,我有一张从关键字到指南针方向字符串的地图: (def dirnames {:n "North", :s "South", :e "East", :w "West"}) 我可以使用地图作为功能查找姓名: (dirnames :n) ;# = "North" 在我看来 (map dirnames [:n :s]) 应该返回向量 ["North" "South"] 但它又回来了 [:n :s] 相反。我已经尝试了六种方法,在(map)调用中提供不同的函数来代替“dirnames”,我总是得到

我有一张从关键字到指南针方向字符串的地图:

(def dirnames {:n "North", :s "South", :e "East", :w "West"})
我可以使用地图作为功能查找姓名:

(dirnames :n)
;# = "North"
在我看来

(map dirnames [:n :s])
应该返回向量

["North" "South"]
但它又回来了

[:n :s]
相反。我已经尝试了六种方法,在(map)调用中提供不同的函数来代替“dirnames”,我总是得到关键字向量


很明显,我缺少一些基本的东西。这是什么?

对我有效,我是否误解了这个问题:

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

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


对我来说很有效,我是否误解了这个问题:

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

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


我敢打赌你忘了带一些帕伦。考虑这个函数定义:

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

它看起来几乎正确,但它计算
map
的副作用,然后计算
dirnames
的副作用(这两个都不起作用),最后返回
[:n:s]
。这是我能想到的关于你所描述的行为的唯一合理解释。

我打赌你忘了一些帕伦。考虑这个函数定义:

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

它看起来几乎正确,但它计算
map
的副作用,然后计算
dirnames
的副作用(这两个都不起作用),最后返回
[:n:s]
。这是我能想到的关于你所描述的行为的唯一合理解释。

错误的问题,尽管我很高兴知道(mapv)。问题不在于我得到的是一个seq还是一个向量,而是我没有得到字符串,而是得到了关键字。错误的问题,尽管我很高兴知道(mapv)。问题不在于我得到的是一个seq还是一个vector,而是我没有得到字符串,而是关键词。哪个Clojure版本?我只在1.4.0和1.5.1中进行了尝试,这两个版本都可以满足您的需要,即
(map dirnames[:n:s])
的计算结果为
(“北”“南”)
。或者用
mapv
替换
map
,你会得到
[“北”“南”]
;我在Light Table的“InstaREPL”中看到了上面的结果。如果我以“java-cp clojure.jar clojure.main”的形式运行REPL,我看到了正确的行为。这似乎是一个轻表问题。啊,我不能帮你:/我不使用轻表。要求轻表从头开始评估整个模块似乎已经解决了问题。哪个版本的clojure?我只在1.4.0和1.5.1中进行了尝试,这两个版本都可以满足您的需要,即
(map dirnames[:n:s])
的计算结果为
(“北”“南”)
。或者用
mapv
替换
map
,你会得到
[“北”“南”]
;我在Light Table的“InstaREPL”中看到了上面的结果。如果我以“java-cp clojure.jar clojure.main”的形式运行REPL,我看到了正确的行为。这似乎是一个轻表问题。啊,我不能帮你:/我不使用轻表。要求轻表从头开始评估整个模块似乎解决了问题。结果证明代码是正确的,但我把和我一起工作的REPL搞糊涂了。我认为var的定义与我意识到的不同。很好的教训。这个问题的猜测很好。原来代码是正确的,但我把我正在使用的REPL搞错了。我认为var的定义与我意识到的不同。很好的一课,这个问题猜对了。