名前 | 引数 | 説明 | 例 |
---|---|---|---|
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 (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)) ; (A B) |
LABEL 又は、 DEFINE | シンボル* 値 | 第一引数のシンボルに第二引数の値を設定する(変数設定) 第一引数のシンボルに次の予約キーワードは指定できない T NIL COND LAMBDA LABEL QUOTE DFINE CONS CAR CDR EQ ATOM LABELの戻り値は変数に設定した値となる LABELは実行時点の変数スコープに変数を設定する (ユーザ関数の実行時評価部でLABELを使うとユーザ関数内でのみ有効な変数となる) | (LABEL A (QUOTE B)) ; B (CONS A A) ; (B . B) (LABEL F (LAMBDA (X Y) (CONS X Y))) ; (LAMBDA (X Y) (CONS X Y)) (F (QUOTE A) (QUOTE B)) ; (A . B) (DEFINE A (QUOTE C)) ; 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 |