2014-05-20 2 views
1

지도 키 이상 (지도) :Clojure에 I 방향 문자열을 나침반 키워드에서지도를 가지고

(dirnames :n) 
;# = "North" 

그것을 :

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

나는 함수로지도를 사용하여 이름을 찾아 볼 수 있습니다 나에게 보인다

(map dirnames [:n :s]) 

는 벡터

에게 반환한다고
["North" "South"] 

하지만 대신

[:n :s] 

반환합니다. 필자는 (지도) 호출에서 "dirnames"대신 다른 기능을 제공하는 6 가지 방법을 시도했으며, 항상 키워드 벡터를 얻습니다.

분명히 나는 ​​기본적인 것을 놓치고 있습니다. 이게 뭐야? 나를 위해

+0

어떤 Clojure 버전입니까? 필자는 1.4.0과 1.5.1에서만 시도해 본 결과 두 가지 모두 원하는대로 동작합니다. 즉, (map dirnames [: n : s])'("North" "South")'로 평가됩니다. 또는'map'을'mapv'로 바꾸면'[ "North" "South"]'가됩니다. –

+0

Light Table에서이 작업을 수행했습니다. 위의 결과를 Light Table의 "InstaREPL"에서 보았습니다. REPL을 "java -cp clojure.jar clojure.main"으로 실행하면 올바른 동작을 보게됩니다. – Will

+0

가벼운 테이블 문제인 것처럼 보입니다. – Will

답변

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"] 
+0

(mapv)에 대해 알고 기쁩니다. 문제는 제가 seq 나 vector를 얻는 것이 아닌, 문자열을 되 찾는 것이 아니라 키워드입니다. – Will

2

난 당신이 몇 가지 괄호를 잊어 내기.

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

그것은 거의 바로 보이지만, (그 모두가 아무것도 할 수 없음) 부작용에 대한 다음 dirnames, 부작용 map 평가 한 다음 마지막으로 [:n :s]을 반환이 함수 정의를 생각해 보자. 그것이 당신이 묘사하는 것과 같은 행동에 대해 생각할 수있는 유일한 합리적인 설명입니다.

+0

코드가 옳았다는 것을 알았지 만, 나는 함께 작업하고있는 REPL을 혼란스러워했다. 나는 var가 내가 깨달은 것보다 다르게 묶여 있다고 생각한다. 좋은 교훈. – Will

+0

이 질문에 대한 좋은 소식입니다. – johnbakers