Clojure

ClojureでmapAccumL

こっちはスタックオーバフローする。lazy-seq意味なし。 user> (defn map-accum-l [f s ls] (if (empty? ls) [s []] (let [[ss y] (f s (first ls)) [sss ys] (map-accum-l f ss (rest ls))] [sss (lazy-seq (cons y ys))]))) #'user/map-accum-l user> (map…

Clojureでscanl

lazy-seqはこういうときに使えるのか。 user> (defn scanl [f q ls] (lazy-seq (cons q (if (empty? ls) '() (scanl f (f q (first ls)) (rest ls)))))) #'user/scanl user> (scanl + 0 (range 0 9)) (0 0 1 3 6 10 15 21 28 36) user> (take 10 (scanl + 0 …

Clojureのキーワード引数ライブラリ: funky-0.0.1

Clojureでキーワード+オプショナル引数に対応するマクロを拡張して、ClojureのリポジトリClojarsに登録しました。ライブラリの名前はfunkyです。 Clojarsはfunky 0.0.6 - Clojars ソースコードはmaoe/funky · GitHub APIリファレンスはfunky - Overview 拡張…

キーワード + オプショナル引数

Clojureは組み込みではキーワード引数がサポートされてませんが、分配束縛(destructuring)を使うことで同様のことができるようになります。例はにあります。リンク先にも書いてあるとおり、このパターンをマクロにしたものが、clojure.contrib.defに入って…