Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

dash.elをつかってイマドキなリスト操作

Lisp系のご多分に漏れず、Emacsもリスト型データを基本として扱います。
そのリスト型をイマドキな感じのメソッドで操作できるのが、このdash.elです。

例えば、Rubyでもお馴染みのmapなんかがあります
...emacs lispを書き慣れていないせいか、lambdaやらitやらがもの凄い魔界記法に見えますが

-map (fn list)

(-map (lambda (num) (* num num)) '(1 2 3 4)) ;; => '(1 4 9 16)
(-map 'square '(1 2 3 4)) ;; => '(1 4 9 16)
(--map (* it it) '(1 2 3 4)) ;; => '(1 4 9 16)

他にも、eachや

(let (s) (-each '(1 2 3) (lambda (item) (setq s (cons item s))))) ;; => nil
(let (s) (-each '(1 2 3) (lambda (item) (setq s (cons item s)))) s) ;; => '(3 2 1)
(let (s) (--each '(1 2 3) (setq s (cons it s))) s) ;; => '(3 2 1)

Rubyのtimesに似たdottimesなんてのも。
例に出てくる!consもdash.elが提供する関数です。

(let (s) (-dotimes 3 (lambda (n) (!cons n s))) s) ;; => '(2 1 0)
(let (s) (--dotimes 5 (!cons it s)) s) ;; => '(4 3 2 1 0)

イケイケemacs lispハッカーなら自前のライブラリを持っていそうですが
私のような貧弱勢の場合は非常に有り難い逸品です。