さくらんぼのlambda日記

lambdaちっくなことからゲーム開発までいろいろ書きます。

eval

S式

Lispの扱う式というものはS式である。
S式とは、
1 シンボルはS式である
2 S式同士のペアはS式である

http://ja.wikipedia.org/wiki/S

という単純なものである。

Eval

Lispインタプリタである。
そして、式は評価されて初めて意味をなす。
この評価を行なう関数をevalと言う。

Lispを理解するには、このeval関数になりきるのが重要。( C言語など他の言語でも同様 )
というわけで動作理解のためのメモ。

Wikipediaのが詳しい………。
http://ja.wikipedia.org/wiki/LISP

・'(クオート)ではじまる場合は関数として評価しない。 'hogeとするとシンボルhogeになる

[3]> (setq hoge '(1 2))
(1 2)
[4]> hoge
(1 2)
[5]> 'hoge
HOGE


・`(バッククオート)ではじまる場合も関数としては評価しないが、
コンマ(,)、コンマ/アト(,@)のついている式は関数として評価する。
,@の場合には外側の()がはずれる。

[29]> `( 1 ,@(+ 2 3))
(1 . 5) ;; これは consセルで ( 1 . 5)
[33]> `( 1 ,(+ 2 3))
(1 5) ;;これは ( 1 (5)) consセル二つ

・リストを評価する場合。最初のセルは関数名として評価する。