Skip to content

Instantly share code, notes, and snippets.

@kurogelee
Created April 18, 2014 23:51
Show Gist options
  • Save kurogelee/11068882 to your computer and use it in GitHub Desktop.
Save kurogelee/11068882 to your computer and use it in GitHub Desktop.
clojure.walkでシーケンスを再帰的に変更する ref: http://qiita.com/kurogelee/items/938a01c374062b157dc3
user=> (require '[clojure.walk :as w])
user=> (w/postwalk vector '(1 (2)))
[([1] [([2])])]
user=> (w/postwalk #(if (number? %) (- %) %) [2 [3] 4])
[-2 [-3] -4]
user=> (w/prewalk #(if (number? %) (- %) %) [2 [3] 4])
[-2 [-3] -4]
user=> (w/prewalk vector '(1 (2)))
StackOverflowError clojure.lang.RT.boundedLength (RT.java:1654)
user=> (w/postwalk-demo '(1 (2) 3))
Walked: 1
Walked: 2
Walked: (2)
Walked: 3
Walked: (1 (2) 3)
(1 (2) 3)
user=> (w/prewalk-demo '(1 (2) 3))
Walked: (1 (2) 3)
Walked: 1
Walked: (2)
Walked: 2
Walked: 3
(1 (2) 3)
user=> (w/postwalk-demo '(1 {:a [:b #{:c}]} 3))
Walked: 1
Walked: :a
Walked: :b
Walked: :c
Walked: #{:c}
Walked: [:b #{:c}]
Walked: [:a [:b #{:c}]]
Walked: {:a [:b #{:c}]}
Walked: 3
Walked: (1 {:a [:b #{:c}]} 3)
(1 {:a [:b #{:c}]} 3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment