我學習Clojure的Koans:反覆應用功能
https://github.com/functional-koans/clojure-koans/blob/master/src/koans/10_lazy_sequences.clj
我停留在這一個:
"Iteration can be used for repetition"
(= (repeat 100 :foo)
(take 100 (iterate ___ :foo)))
我不知道確切的內置功能填寫空白,所以我試着寫我自己的。我把它作爲一個單獨的函數寫成測試。
我打算這樣做:如果x是一個seq,那麼就重複它的第一個元素。否則,讓它成爲一個seq。
(def f (fn [x] (if (seq? x) (cons (first x) x) (cons x '()))))
當我明確地運行它,它看起來不錯:
user=> (f :abc)
(:abc)
user=> (f (f :abc))
(:abc :abc)
user=> (f (f (f :abc)))
(:abc :abc :abc)
但使用iterate
增加了一個額外的括號:
user=> (take 1 (iterate f :abc))(:abc)
user=> (take 2 (iterate f :abc))
(:abc (:abc))
user=> (take 3 (iterate f :abc))
(:abc (:abc) (:abc :abc))
What causes this?
順便說一句,確切的內建函數是標識 – status203
是的。不幸的是,我無法弄清楚公司,並看着別人的解決方案。 – mparaz
koans並不總是建立你的知識;我確切地知道我想要的功能,但是因爲Clojure有很多內置的概念,所以直到我來到這裏,我才知道它被稱爲身份! –