Clojure에서 recur를 사용하지 않고 신속하게 요소에 여러 번 assoc을 적용 할 수 있습니까? 이다Clojure에서 루프를 사용하여 여러 번 assoc 적용
, 같은 : 코드 위
(defn set-thing
[foo i val]
(assoc foo i val))
(let [foo [3 4 2 5 8]]
(last (for [i (range 0 (count test))]
(set-thing foo i 32)))
그러나 분명히 난 후 나는 무엇을하지 않습니다. 위의 함수는 마지막 값이 32이고 나머지는 변경되지 않은 벡터를 반환합니다. 내가하는 일은 모든 값이 32로 설정된 벡터를 다시 얻는 것입니다.
위 코드의 코드와 코드가 크게 다르기 때문에 set 함수를 사용하는 것이 절대적으로 필요합니다. 지도의 사용. 실제 코드는 구조체의 구조체에 꽤 깊숙이 들어가 있습니다.
재발을 사용하지 않고이 효과를 다시 얻을 수 있습니까?
편집 : 여기
코드의 조각 내가 달성하고자하는 일을, 루프를 사용하고 재발입니다. 다큐 멘 테이션 코멘트의 "터미널"나는 그 작업입니다 라이브러리를 참조한다
(defn fill!
"Fills the terminal with one specific tile."
[{:keys [screen] :as term} tex-x tex-y color]
(let [grid-width (screen :grid-width)
grid-height (screen :grid-height)]
(loop [x 0
y 0
term term]
(if (= x grid-width)
(if (= y grid-height)
term
(recur 0 (inc y) ((term :set-char!) term x y tex-x tex-y color)))
(recur (inc x) y ((term :set-char!) term x y tex-x tex-y color))))))
은 응용 프로그램 개발에 사용할 수있는 터미널을 시뮬레이션 할 예정이다. 당신이 값 32
5 개 인스턴스의 순서가 필요한 경우
'set' 함수의 목적은 무엇입니까? 그것은 ['clojure.core/set'] (http://clojuredocs.org/clojure.core/set)에 그림자를 드리 우며''assoc' (http://clojuredocs.org/)의 덜 유용한 버전 인 것처럼 보입니다. clojure.core/assoc). –
내가 가지고있는 코드는 훨씬 더 고급이며, 그 안에는 set 함수의 이름이 실제로 설정되어 있지 않습니다. 오히려 타일 세트 (x, y, tex-x, tex-y 및 색상 매개 변수를 사용하여)의 격자에 하나의 타일을 설정하고 응용 프로그램의 현재 상태를 반환하는 기능이 있습니다. 그래서, 제가하려고하는 것은 x와 y 좌표의 전체 그리드에 걸쳐 모든 타일을 같은 타일 유형으로 반복하는 것입니다. 따라서 set 메소드가 필요합니다. –