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