関数


autoload

Type: Function
Arguments: autoload FN FILE &optional COMMANDP MACROP
Package: lisp
File: misc.l
関数が呼び出された時点でファイルをロードするよう宣言します。 

  FN       : 関数シンボルを指定します。 
  FILE     : ロードするファイルを指定します。 
  COMMANDP : 実行するときにinteractiveに実行するかどうかを指定します。 
  MACROP   : マクロかどうかを指定します。 

関数を呼び出す側からは、元々そのファイルがロードされていたかのように実行 
を続けます。めったに使わない関数をautoloadで宣言しておくとメモリ消費量を
節約できます。また、起動が速くなります。 

使用例: 
  ;;; defs.lより
  (autoload 'search-dialog "dialogs" t)
  (autoload 'replace-dialog "dialogs" t)
  (autoload 'count-matches-dialog "dialogs" t)
  (autoload 'goto-line-dialog "dialogs" t)
  (autoload 'open-file-dialog "dialogs" t)

--- muleの説明 ---

Function: autoload symbol filename &optional docstring interactive macro

この関数は、(filename からオートロードするよう) symbol で名付けられた関
数 (もしくはマクロ)を定義します。 filename は、この関数を呼ぶ時 load に
渡すパス名です。 

docstring は、この関数用のドキュメンテーションです。これは(通常)この関数
の関数定義中のものと同じストリングになります。 

interactive が non-nil の場合、この関数はインタラクティブに呼ばれます。 
(ここでは)完全な interactive specification を与える必要はありません。 
macro が non-nil の場合、この関数は(実は)マクロです。 

symbol がすでに non-nil の関数セルを持つ場合、 autoload は(何もせず) nil 
を返します。 (関数セルが) void の場合、 symbol の関数セルに (autoload 
filename docstring interactive macro ) というオートロードフォームを設定 
します。 

symbol の名前の関数を呼ぶと、(まず)オートロードフォームが評価され、 
filename の名前のファイルが load でロードされます。 (この後) symbol の関
数セルは Lisp 関数かマクロを指すことになります。そうならない場合、エラー
になります。 

(内容の評価でエラーが生じ) ファイルの評価が完全に行なえなかった場合、ロ
ード中に行なわれた関数定義や provide 呼び出しは undone されます(訳注:取
り消されます)。これは、(エラーを直した後)再び autoload できるようにする
ためです。

SeeAlso: 各種ロード関係の関数の違い
[ Intro | 目次 | 索引 | 目的別 | 関数 ]

autoload-function-p

Type: Function
Arguments: autoload-function-p DEF
Package: lisp
File: misc.l
指定された関数がautoloadされたか否かを返します。 
  nil 指定された関数がautoload済み
      もしくはautoloadしない関数の場合 
  t   指定された関数がautoload前の場合 

使用例: 
  (export 'lisp-info-F1)
  (autoload 'lisp-info-F1 "info-modoki" t)
  (autoload-function-p 'lisp-info-F1)
  => t
  (lisp-info-F1)
  (autoload-function-p 'lisp-info-F1)
  => nil

SeeAlso: autoload
[ Intro | 目次 | 索引 | 目的別 | 関数 ]

beginning-of-defun

Type: Function
Arguments: beginning-of-defun &optional (ARG 1)
Package: editor
File: sexp.l
カーソルを関数定義の先頭に移動します。[ESC C-a]

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

commandp

Type: Function
Arguments: commandp OBJECT
Package: editor
File: builtin.l
関数がinteractive宣言されていれば tを返し、そうでなければnilを返します。 

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

defun

Type: Macro
Arguments: defun NAME (&rest LAMBDA-LIST) &body BODY
Package: lisp
File: evalmacs.l
関数を定義します。 

--- muleの説明 ---
defun は、新しく lisp 関数を定義する場合の(通常の)方法です。 defun は、 
symbol をこのフォームの残りの部分が示す関数の名前として定義します。 (こ 
れは)このシンボルの関数セルが、 parameter-list と forms から作られるラム
ダ式 (lambda parameter-list . forms) を指すようにすることで行なわれます。 
値セルは関数セルとは独立しているため、同じシンボルをグローバル変数として
用いてもかまいません。 

(上で述べたように) forms 中の最初の 2つのフォームは、ドキュメンテーショ
ンストリングや宣言であることができます。 defun は関数の再定義をチェック
してはいないため、 (car のような) primitive を何も知らせず(再)定義してし 
まうことさえありえます。 defun は symbol を返します。 

  (defun foo () 5)
  => foo
  (foo)
  => 5
  (defun bar (a &optional b &rest c)
      (list a b c))
  => bar
  (bar 1 2 3 4 5)
  => (1 2 (3 4 5))
  (bar 1)
  => (1 nil nil)
  (bar)
  -> ERROR: Wrong number of arguments.
  (defun capitalize-backwards ()
      "This function makes the last letter of a word upper-case."
      (interactive)
      (backward-word 1)
      (forward-word 1)
      (backward-char 1)
      (capitalize-word 1))
  => capitalize-backwards

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

ed::build-summary-function

Type: BufferLocal
Package: editor
バッファ中の関数の一覧を取得します。行及び関数名を要素に持つリス
トで得られます。list-functionで使用されています。 

使用例: 
  ; listfn.lで評価
  (funcall ed::build-summary-function)
  => ((10 "lisp-build-summary-of-functions") (39 "lisp-maketags"))

SeeAlso: list-function
[ Intro | 目次 | 索引 | 目的別 | 関数 ]

end-of-defun

Type: Function
Arguments: end-of-defun &optional (ARG 1)
Package: editor
File: sexp.l
カーソルを関数定義の末尾に移動します。[ESC C-e]

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

flet

Type: Special Form
Arguments: flet ({(NAME LAMBDA-LIST {declaration}* [doc-string] {FORM}*)}*) {FORM}*
Package: lisp
File: builtin.l
ローカルな関数を定義してフォームを評価します。フォーム内で flet で
定義された関数は、外部で定義された同じ名前の関数よりも優先されます。 
関数は同時に複数定義できます。 

それぞれの定義方法は defun のように、最初に関数名、 
次にパラメータのリスト(&optional, &rest, &key パラメータも使えます)、 
そしてoptional declaration と docstring、そして最後にフォームと続きます。 

  (flet ((safesqrt (x) (sqrt (abs x)))) 
    ;; The safesqrt function is used in two places. 
    (safesqrt (apply #'+ (map 'list #'safesqrt longlist))))

SeeAlso: labels
SeeAlso: macrolet
[ Intro | 目次 | 索引 | 目的別 | 関数 ]

interactive

Type: Special Form
Arguments: interactive {INTERACTIVE-STRING {PARAMETER}*|LIST}
Package: editor
File: builtin.l
対話的なマクロ関数の定義は、必ずinteractiveを指定する必要があります。 
以下の場面で使われるマクロ関数は対話的でなければなりません。 

  1) M-x から呼び出す場合 
  2) define-key, global-set-key でキーバインドする場合 
  3) ツールバーに登録する場合 

以下のように引数を対話的に渡すことも可能です。 

  ;;; 引数が何もない時
  (defun foo ()
    (interactive) ... )

  ;;; 引数がある時
  (defun foo (n)
    (interactive "nPercent: ") ... )

nPercent:のうち最初の1文字(ここではn)だけが以下のような意味を持ちます。 
2文字目以降(Percent:)は,ミニバッファに表示される説明の文字列になります。 

  b   既に存在するバッファの名前
  f   既に存在するファイルの名前
  n   数字(整数) 
  s   文字列
  B   バッファの名前(存在しなくてもよい) 
  F   ファイルの名前  (存在しなくてもよい) 
  N   数字。ただし、コマンドがプレフィックス付きで起動された場合は、 
      それを用いる
  S   シンボル
  D   ディレクトリ
  l(エル)  ファイルの複数選択です。ファイル名のリストが取れます。 

  :title0 "mojiretsu"
  :default0 "bar"
                  :default0 , :default1, :default2というように指定できます 
  :history0 'execute

--99/08/23追加
 1. (interactive "0C \n1s \n2b") みたいに、 
    制御文字(って言うのでしょうか?)の前に数字を
    いれられるようなのですが、これはどういう意味
    を持つのでしょうか? 
    # misc.l の execute-extended-command に実例 
    # がありますけど、さっぱ分かりまへん。(^^;

0 のとき、プロンプトに数引数がつきます。それ以外の場合 
は無視されます。結局、たいした意味はありません(^^;

|  2. (interactive "s何? : " :history0 "ん?") と
|     いった、:history[01]? とその組みになる引数は、 
|     どういう働きをするんでしょうか? 

ミニバッファを初期化する際に呼ばれる *enter-minibuffer-hook* 
(minibuf.l の prologue-minibuffer)の引数に使われます。 
ちなみに、minibuffer-initialize の設計はたぶん間違って
ます。 


--------------以下muleの説明---------------------------
Special Form: interactive [arg-descriptors]

この特殊フォームは、(これを持つ)関数がコマンドであること、(つまり) "M-x 
か、それにバインドされたキーを入力することでインタラクティブに呼び出すこ
とができる" こと、を宣言します。 arg-descriptors は、"(対象とする)関数を 
インタラクティブに呼ぶ場合、どのようにアーギュメントを与えるか" を示しま
す。 interactive は(呼ばれた場合)何も行ないません。 arg-descriptors の評 
価も行なわず、(常に) nil を返します。 arg-descriptors が与えられない場合、 
(対象とする)関数はアーギュメントを持たずに呼ばれます。もちろん、(対象と
する)関数が 1 つ以上のアーギュメントを必要とする場合、エラーになります。 

arg-descriptors がストリングでない場合、それは、評価によって (対象とする) 
関数に渡されるアーギュメントのリストが得られるフォームでなくてはいけませ 
ん。 

arg-descriptor がストリングの場合、このストリングは (そのコード文字が必 
要とする場合) プロンプトを後に続けたコード文字で構成されてなくてはいけま
せん。プロンプトは、ストリングの終りかニューラインで終ります。ニューライ
ンの後 (次のアーギュメント用の) 2 番目のコード文字とプロンプトとを与える 
ことができます(以下同様)。 

ストリングの最初の文字が * の場合、バッファがリードオンリーである場合エ
ラーを出し(訳注:signal)ます。この場合、(その)次の文字を最初のコード文字 
として用います。 

コード文字の多くは、(その)アーギュメントが既存の何か (バッファ、関数、フ
ァイル名、等) の名前でなくてはいけないことを指示します。このような場合、 
(Emacs により)デフォルトのものが与えられるとともに、正しくない (訳注:条
件に合わない)名前は受け入れられなくなります (Emacs は `[No Match]' と文 
句を言い、プロンプトを出し、再び名前を求めます)。 TAB, SPC, RET は、関数 
completing-read に従い名前の completion を行ないます。 

以下のテーブルにおいて、"completion" とマークされたコード文字は completion 
を行ないます。 "existing" とマークされたものは(既存の)名前を要求します。 
"default" とマークされたものはデフォルトを持ちます。 "prompt" はプロンプ 
トを持たなくてはいけません。 

a 

  関数名(i.e., fboundp である(訳注:fboundp を満たす)シンボル)。 
  existing, completion, prompt
  b
  バッファ名。existing, completion, prompt
  B
  バッファ名。completion, prompt
  c
  文字。prompt
  C
  コマンド名(i.e. インタラクティブ関数)。existing, completion,
  prompt
  d
  ポイントのポジションを数値として用います。No I/O
  D
  ディレクトリ名。existing, completion, default, prompt
  f
  関数名。existing, completion, default, prompt
  F
  関数名。existing, default, prompt
  k
  キーシーケンス。 (カレントなキーマップで) コマンドか undefined さ 
  れたコマンドが見つかるまで文字を読み込み、そのキーシーケンスをスト 
  リングとして関数に渡します。カーソルはエコーエリアに移動しません。 
  prompt
  m
  (数値としての)マークのポジション。No I/O
  n
  数値。数値を必要とします。prompt
  N
  未処理のプレフィックスアーギュメントを関数に渡します。プレフィック
  スアーギュメントが nil の場合、 (n におけるように)数値を読み込みま
  す。数値を必要とします。prompt
  p (小文字のp)
  処理されたプレフィックスアーギュメントを関数に渡します。No I/O
  P (大文字のP)
  未処理のプレフィックスアーギュメントを関数に渡します。No I/O
  r
  ポイントとマークを、関数に対する 2つの(数値の) アーギュメントとし 
  て(小さい方を先にして)渡します。 No I/O
  s
  ストリングを読み込み、LFD か RET でターミネートします。このどちら 
  も(訳注:LFD も RETも) C-q を用いることでストリングに含めることは
  できます。 prompt
  S
  ストリングを読み込み、空白(訳注:whitespace) 文字のどれかでターミ 
  ネートします。読み込まれたものは、シンボルとして intern されます。 
  C-q を用いることで空白文字をストリングに含めることはできます。通常
  シンボルをターミネートする文字(e.g., ()[])は (訳注:ここではこのス
  トリングを)ターミネートしません。 prompt
  v
  ユーザーオプションとして宣言された変数(i.e., user-variable-p)。 
  existing, completion, prompt
  x
  Lisp フォームを読み込み、LFD か RET でターミネートします。 
  読み込まれるストリングが閉じのダブルクォートをタイプする前にターミ 
  ネートされた場合、閉じのダブルクォートを追加します。リストやベクト 
  ルを読み込んでいて、最後の閉じの ) や ] の前にターミネートされた場
  合、エラーを出します。 (訳注:読み込んだ)フォームは評価しません。 
  prompt
  X
  (x におけるように)フォームを読み込んだ後、評価し、その結果を関数に
  渡します。 prompt
  (defun foo1 ()                    ;foo1 はアーギュメントを取らず、 
      (interactive)                 ;2 word 先に移動させるだけ。 
      (forward-word 2))
  => foo1
  (defun foo2 (n)                   ;foo2 はアーギュメントを 1つ取り、 
      (interactive "p")             ;それは 処理されたプレフィックスである。 
      (forward-word (* 2 n)))
  => foo2
  (defun foo3 (n)                 ;foo3 はアーギュメントを 1つ取り、 
      (interactive "nCount:")     ;それは ミニバッファから読み込まれる。 
      (forward-word (* 2 n)))
  => foo3
  (defun three-b (b1 b2 b3)
    "Select three existing buffer (prompting for them in the Minibuffer)
  Put them into three windows, selecting the last one."
      (interactive "bBuffer1:\nbBuffer2:\nbBuffer3:")
      (delete-other-windows)
      (split-window (selected-window) 8)
      (switch-to-buffer b1)
      (other-window 1)
      (split-window (selected-window) 8)
      (switch-to-buffer b2)
      (other-window 1)
      (switch-to-buffer b3)
    )
  => three-b
  (three-b "*scratch*" "declarations.texinfo" "*mail*")
  => nil

  参照 commandp
=================
以下、花井 達さん作 

===制御文字リスト 凡例===

(書式)
制御文字 {属性}[最終変換値]     入力値

{属性}
 E: Existing     存在するモノを入力しない限り終わらない 
 C: Completion   入力候補表示・補完あり 
 P: Prompt       ミニバッファでユーザー入力 
 D: Dialog       ダイアログ表示することも 

[最終変換値]
{xx}    - 関数には xxx 型の値がくる 
{xx/yy} - 入力値が省略又は未定義値だと、yy型がくる。 
{xx|yy} - 入力値が多重値だと、yy の型でくる
{*****} - なんでもあり 

===制御文字リスト===
a       {ECP }[symbol]          関数名。 
b       {ECP }[buffer]          バッファ名。 
B       { CP }[buffer/string]   バッファ名。 
c       {  P }[character]       キー入力キャラクタ。 
C       {ECP }[symbol]          インタラクティブコマンド。 
d       {    }[integer]         選択バッファ上での位置。 
D       {ECPD}[string]          ディレクトリ。 
e       { CP }[string]          実行可能ファイル。 
f       { CPD}[string]          ファイル。 
F       { CP }[string]          ファイル。 
k       {  P }[character|cons]  キーシーケンス。 
l       {ECPD}[string|cons]     ファイル。複数可。 
m       {    }[integer]         マーク。 
M       {    }[integer]         選択開始位置。 
n       {  P }[integer/nil]     数値。 
N       {  P }[integer/nil]     数値。前置引数(c-u)を優先採用。 
p       {    }[integer]         前置引数による数値。 
P       {    }[integer/nil]     前置引数による数値。 
r       {    }[integer]         リージョン。マークが先に来る。 
R       {    }[integer]         選択範囲。開始位置が先に来る。 
s       {  P }[string]          文字列。 
S       { CP }[symbol]          シンボル。 
v       {ECP }[symbol]          変数。 
x       {  P }[*****]           lisp式。 
X       {  P }[*****]           lisp式。関数には評価後の値が渡る 

AgGhHiIjJKoOqQtTuUVwWyYzZ       いまのところ使えない 

===その他===
*       interactive 文字列の先頭がこれになってるときは、 
        選択バッファが ReadOnly だとエラーにしちゃう。 
          (interactive "*fFiles : ")   ;;; こんな感じ
\n      複数の制御文字を使う場合、これで区切る
          (interactive "*fFiles : \np")::: こんな感じ
0       各制御文字の前に置いておくと、プロンプトに
        前置引数(C-u)が挿入されて表示される。 
          (interactive "0fFiles : ")   ::: こんな感じ
1-9     各制御文字の前に置けるけど、とりあえず意味無し。 

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

list-function

Type: Function
Arguments: list-function &rest ARGS
Package: editor
File: listfn.l
バッファ中の関数の一覧をダイアログで表示します。選択することで定 
義位置にジャンプすることが可能です。バッファ中の関数の一覧は、バ
ッファローカル変数build-summary-functionから取得しています。 

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

mark-sexp

Type: Function
Arguments: mark-sexp &optional (ARG 1)
Package: editor
File: sexp.l
前方のS式の末尾にマークを設定します。[ESC NUL]

[ Intro | 目次 | 索引 | 目的別 | 関数 ]

shiftf

Type: Macro
Arguments: shiftf {PLACE}+ NEWVALUE
Package: lisp
File: setf.l
引数として与えられた値の格納場所の内容をシフトさせます。 
(shiftf a b c)とすると以下のようになります。 

        ┌a ┐  ┌b ┐  ┌c ┐ 
実行前:│ 1│  │ 2│  │ 3│ 
        └─┘  └┬┘  └┬┘ 
              ┌─┘  ┌─┘ 
          ┌─┘  ┌─┘  
          ↓      ↓      
        ┌a ┐  ┌b ┐  ┌c ┐ 
実行後:│ 2│  │ 3│  │ 3│ 
        └─┘  └─┘  └─┘ 

SeeAlso: rotatef
[ Intro | 目次 | 索引 | 目的別 | 関数 ]