sequence関係のユーティリティ関数で自分がよく知らないものをまとめておく。
昔はindexedっていうそのまんまな関数があったけど、1.3くらいからなくなっていた。今はmap-indexedっていう関数を使う。よく使うのはこんな感じの使い方。
(map-indexed #(vector %1 %2) ["a" "b" "c" "d" "e"])
; ([0 "a"] [1 "b"] [2 "c"] [3 "d"] [4 "e"])| module Compose where | |
| -- 合成演算子 . | |
| -- f . g = \x -> f (g x) | |
| twice f = f . f | |
| compose = foldr (.) id [map (*2), filter even] | |
| composed = twice $ compose | |
| composed2 = twice compose | |
| -- これだけはコンパイルが通らない。 | |
| -- 理由は、composeにリストを渡した時点でcallableでなく値になってしまうから。 |
この記事は、lispリーダーマクロアドベントカレンダー の4日目の記事です。 タイトルにある通り、Clojure でのリー ダーマクロについて取り扱います(対象とする Clojure のバージョンは 1.4)。
2019-11-01 Wikiに変更を適応