- fn 20170209.1804(in MELPA)
- Concise anonymous functions for Emacs Lisp
概要
Emacs Lispの無名関数lambdaは
冗長だと感じませんか?
fn.el
は無名関数を
コンパクトに書く方法を提供します。
たとえば、こんなふうに。
(lambda (x) x) ;; ↓ (fn <>) (lambda (x y) (list x y)) ;; ↓ (fn (list <1> <2>)) (lambda (x &rest r) (list x r)) ;; ↓ (fn (list <1> <rest>))
fnの中では以下の記法で引数を参照します。
<>
は最初の引数<1>
〜<9>
はN+1番目の引数<rest>
は残りの引数
fn
は複数個の式を置けますが、
1つの式からなる無名関数は
fn:
という簡易記法も用意されています。
(lambda (x y) (list x y)) ;; ↓ (fn (list <1> <2>)) ;; ↓ (fn: list <1> <2>)
通常のラムダ式と比べると
圧倒的に短くなったのがわかるでしょう。
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/")))
初めてfnを使う方は
以下のコマンドを実行します。
M-x package-install fn
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name fn
使用例
(setq 0-5 (number-sequence 0 5)) ; => (0 1 2 3 4 5) (mapcar (lambda (x) (* x x)) 0-5) ; => (0 1 4 9 16 25) (mapcar (fn (* <> <>)) 0-5) ; => (0 1 4 9 16 25) (mapcar (fn: * <> <>) 0-5) ; => (0 1 4 9 16 25) (funcall (fn (setq x 3) (list x <1> <2> <rest>)) "foo" "bar" "rest1" "rest2") ; => (3 "foo" "bar" ("rest1" "rest2")) (funcall (fn (setq x 3) (list x <> <> <>)) "foo" "bar" "rest1" "rest2") ; => (3 "foo" "foo" "foo")
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。