関数定義 - 環境設定のための Emacs Lisp 入門

Emacs Lisp 入門の第 2 回目です。
今回は関数を自分で作成する方法について説明します。

defun

前回、 *scratch* バッファーを使って Emacs を関数電卓にする話をしました。 関数電卓の中には簡単な関数を自分で登録できる機能を持つものもあります。
Emacs でも関数を自分でも定義することにします。 関数を定義する場合には defun を使います。
(defun NAME ARGLIST [DOCSTRING] BODY...)
(defun f (x)
  "3x^2 + 5x + 2"
  (+ (* 3 (expt x 2)) (* 5 x) 2)) ; C-j
f
  
(f 2) ; C-j
24
上記の例では f が関数の「名前(NAME)」で引数(x)を一つ取ります。
引数定義の後の文字列は関数の「説明(DOCSTRING)」で C-h f でヘルプを表示した際に使われます。 この説明は省略可能です。

名前空間

Emacs では関数、変数などの名前空間は一つです。 すなわち、 defun 等で自分で定義するものは Emacs が使っている名前と被らないようする必要があります。
一方、 関数の引数名はローカルなものなので、自由につけても問題はありません。

インタラクティブ関数

前節で定義した関数 f は実はコード上からしか呼び出せません。 コードからしか呼び出せないというのは M-x で呼び出したり、キーにセットして呼び出せないということです。 言い換えると関数ですが、コマンドではないと言えます。

ユーザーからの呼び出しをできるようにするためには関数をインタラクティブにする必要があります。
(defun hello ()
  "Sample command."
  (interactive)
  (message "Hello World!"))
上記のコードのように (interactive) を関数の最初に書いていると インタラクティブな関数になり、 M-x hello で呼び出せるようになります。

無名関数(ラムダ式)

lambda を使うと名前のない関数(ラムダ式)を作ることができます。
(lambda (x)
  (+ (* 3 (expt x 2)) (* 5 x) 2))
このままだと大して役に立ちませんが、 後で紹介するキーバインディングやホックで関数を呼び出す場合に便利です。



関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
43位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。