名前 | 引数 | 説明 | 例 |
---|---|---|---|
COND | (値 値)* (値 値)* … | 引数の各リストを順次評価していく(リストは1つ以上必要) 引数のリストの先頭の値がNIL以外なら対になる値をCONDの戻り値として返す 引数のリストの先頭の値がNILなら次の引数のリストを評価する | (COND ((QUOTE A) (QUOTE B)) ((QUOTE T) (QUOTE C))) ; B (COND ((QUOTE NIL) (QUOTE B)) ((QUOTE T) (QUOTE C))) ; C |
LAMBDA | (シンボル* シンボル* …)* 値* 又は、 (シンボル* シンボル* … . シンボル*)* 値* 又は、 シンボル* 値* 又は、 NIL* 値* | ユーザ関数を設定する 第一引数にユーザ関数の仮引数を定義する 仮引数にはシンボルを並べたリストまたはシンボルで定義する 第一引数にNILまたは空リストを指定すると引数をとらない関数を作れる 第二引数にユーザ関数呼び出し時に評価する値(実行時評価部)を渡す LAMBDAの戻り値はユーザ関数への参照を返す ユーザ関数は実行時に変数スコープを形成する (動的スコープを採用しているので ユーザ関数内で未定義の変数が使用されている場合には ユーザ関数呼び出し元の変数スコープでその変数が定義してあればその値を使用する) | (LAMBDA (X Y) (CONS (CONS X X) (CONS Y Y))) ((LAMBDA (X Y) (CONS (CONS X X) (CONS Y Y))) (QUOTE A) (QUOTE B)) ; ((A . A) B . B) (LAMBDA () (QUOTE A)) ((LAMBDA () (QUOTE A))); A ((LAMBDA (X Y . Z) Z) (QUOTE A) (QUOTE B) (QUOTE C) (QUOTE D)) ; (C D) ((LAMBDA X X) (QUOTE A) (QUOTE B) (QUOTE C)) ; (A B C) |
LABEL 又は、 DEFINE | シンボル* 値or参照 | 第一引数のシンボルに第二引数の値or参照を設定する(変数設定) 第一引数のシンボルに次の予約キーワードは指定できない T NIL COND LAMBDA LABEL QUOTE DFINE CONS CAR CDR EQ ATOM LABELの戻り値は変数に設定した値となる LABELはLABEL実行時点の変数スコープに変数を設定する (ユーザ関数の実行時評価部でLABELを使うとユーザ関数内でのみ有効な変数となる) | (LABEL A (QUOTE B)) (CONS A A) ; (B . B) (LABEL F (LAMBDA (X Y) (CONS X Y))) (F (QUOTE A) (QUOTE B)) ; (A . B) (DEFINE A (QUOTE C)) ; LABELの代わりにDEFINEを使う例 (CONS A A) ; (C . C) [LABELと同じ動作] |
QUOTE | 値* | QUOTEは戻り値として引数を評価せずにそのまま返す (シングルクオート[']を使った略記表現に対応) | (QUOTE A) ; A (QUOTE (A . B)) ; (A . B) (QUOTE (A B)) ; (A B) (QUOTE (A B C . D)) ; (A B C . D) 'A ; (QUOTE A) に同じ '(A B C) ; (QUOTE (A B C)) に同じ '''X ; (QUOTE (QUOTE (QUOTE X))) に同じ |
名前 | 引数 | 説明 | 例 |
---|---|---|---|
CONS | 値 値 | 2つの引数でリストを作る | (CONS (QUOTE A) (QUOTE B)) ; (A . B) (CONS (QUOTE A) (QUOTE NIL)) ; (A) (CONS (QUOTE A) (QUOTE (B))) ; (A B) (CONS (QUOTE A) (QUOTE (B C))) ; (A B C) |
CAR | リスト | リストの先頭を取り出す 引数にシンボルを渡すとエラー | (CAR (QUOTE (A . B))) ; A (CAR (QUOTE (A B C))) ; A (CAR (QUOTE ())) ; () (CAR (CONS (QUOTE A) (QUOTE B))) ; A |
CDR | リスト | リストの後方を取り出す 引数にシンボルを渡すとエラー | (CDR (QUOTE (A B C))) ; (B C) (CDR (QUOTE ())) ; () |
EQ | シンボル シンボル | 2つの引数が同じシンボルならT それ以外はNIL シンボル以外を引数に渡すとエラー | (EQ (QUOTE A) (QUOTE A)) ; T (EQ (QUOTE A) (QUOTE B)) ; NIL (EQ (QUOTE (A . B)) (QUOTE (A . B))) ; エラー |
ATOM | 値 | 引数がリストならNIL それ以外はT | (ATOM (QUOTE A)) ; T (ATOM (QUOTE (A B))) ; NIL (ATOM (CONS (QUOTE A) (QUOTE B))) ; NIL |