3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EmacsLispでデフォルト値が取れる処理の書き方

Last updated at Posted at 2014-06-23

Emacs Lispでデフォルト値を有効にする方法がわからなかったのでメモしておく。

デフォルト値付きの関数を&optionalを使って定義してみる。&optionalは省略できる引数を定義するためのキーワードになる。例としてはこんな感じのやつ。

(defun add (&optional (x 2) (y 2))
  (+ x y))

ここで(add 1 1)を評価すると

Debugger entered--Lisp error: (invalid-function (lambda (&optional (x 2) (y 2)) (+ x y)))
  add1(2 3)
  eval((add1 2 3) nil)
  eval-expression((add1 2 3) nil)
  call-interactively(eval-expression nil nil)

エラーになる。

他の人のコードを見てたときに、defun*を使うとデフォルト値付きで定義することができていた。なのでdefun*を使ってみる。

(require 'cl)
(defun* add (&optional (x 2) (y 2))
  (+ x y))

さてこのコードを実行してみる。

(add)
;=> 4
(add 10)
;=> 12
(add 10 20)
;=> 30

うまく実行できていることがわかると思う。

このdefun*は引数部分に書かれたコードの評価ができる関数になる。let*と同じ系統の関数になる。

できれば最初から評価ができるようにしてほしいんだけど、どういう歴史的経緯でこうなってるのか。そこはいつか機会があればしらべる。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?