シンボル
Lisp語族特有の,何かを識別するための特殊なオブジェクト.
シンボルはその中身と束縛して使う
シンボルに値を束縛する
(setq x 1)
(let ((x 1)) ...)
シンボルに関数オブジェクトを束縛する
(defun x () (format t ”hello!”))
レキシカルに関数オブジェクトを束縛する
(flet ((x () (format t "hello!"))) ...)
シンボルの中身を使う
シンボルに束縛された値
x
シンボルに束縛された値を使うには,ただシンボルを書けばよい
シンボルに束縛された関数
(x)
処理系はシンボルに束縛された関数を呼び出すには,呼び出しの形で書く
(function x)
シンボルに束縛された関数オブジェクトを得るには,functionスペシャルオペレータを使う
(function x)は#'xと書くことができる cf. #' 値と関数は区別される
Common Lispでは,シンボルに値専用のフィールドと関数専用のフィールドとが別々に存在する
code:value-and-function
(let ((x 100)) ;; シンボルxの値フィールドに100を代入
(flet ((x (n) (* 2 n))) ;; シンボルxの関数フィールドに関数を代入
(x x)))
=> 200
意図的に関数オブジェクトを値として格納しない限り,決して両者は混ざらない