Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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ハッカーなら自前のライブラリを持っていそうですが
私のような貧弱勢の場合は非常に有り難い逸品です。