- 1.1 Lispのリスト
- うーん。強引な導入。
- C-M-\ にてリージョンをインデント。
- うーん。強引な導入。
- 1.2 プログラムの実行
- GNU Emacsの内部にはlispインタープリタがあるんだ。なるほど。
- GNU Emacsの内部にはlispインタープリタがあるんだ。なるほど。
- 1.3 エラーメッセージの生成
- 執筆時にはなかったようだが、今はデバッガが立ち上がる。qで抜けられる。
- 執筆時にはなかったようだが、今はデバッガが立ち上がる。qで抜けられる。
- 1.4 シンボル名と関数定義
- わかりやすい説明だ。
- わかりやすい説明だ。
- 1.5 Lispインタープリタ
- シンボルについて、変数の前に関数をやるのはいい感じ。
- バイトコンパイルすると実行が速くなる。
- シンボルについて、変数の前に関数をやるのはいい感じ。
- 1.6 評価
- 副作用の説明。Elispは副作用がおおそうだ。。。
- 副作用の説明。Elispは副作用がおおそうだ。。。
- 1.7 変数
- 変数に関数定義を束縛することもできる。
- 変数に関数定義を束縛することもできる。
- 1.8 引数
- えっと、Emacs 22では、
(concat "The " (+ 2 fill-column) " red foxes.")
これはエラー。昔は大丈夫だったようだ。今はnumber-to-stringを使うのだろう。ちなみにCLだと、
(concatenate 'string "abc" "def") - Elispにおいてもdefunの背後にlambdaがいるとすると(いないかもしれないが)、引数にlispオブジェクトを与えると、そのlispオブジェクトを評価した結果が、環境に登録されるということだろう。(elispが環境をもっているかどうはまだわからない)
- messageってもしかして値を返さないのか??? と思ったら、文字列を返すのね。*scratch*便利。
- messageってformatみたいなんだな。
- えっと、Emacs 22では、
- 1.9 変数への値の設定
- うーん。。。変数は難しい。ここの記述は確かに間違いではないのだが、変数をちゃんとわかっていないと、ちゃんと理解できない。
- 変数は、シンボルによる実現と、環境による実現がある。変数への値の束縛については、CLではsetはシンボル専用、setqは両用、lambdaは環境の生成とともに環境用というのが基本だと思う。(ただし、elispに環境があるのかどうかはしらないので、環境が無いならばまた違うかもしれない)
- CLでは「setqは、setの第一引数のquoteを省略できる版」ではない。elispではそうなのか? ためす。
;; CL
CL-USER(19): (setq hoge 1)
1
CL-USER(20): (let ((hoge 10))
(set 'hoge 2)
(symbol-value 'hoge))
2
CL-USER(21): hoge
2
CL-USER(23): (setq hoge 1)
1
CL-USER(24): (let ((hoge 10))
(setq hoge 2)
(symbol-value 'hoge))
1
CL-USER(25):hoge
1
;; EL (*scratch*)
(setq hoge 1)
1
(let ((hoge 10))
(set 'hoge 2)
(symbol-value 'hoge))
2
hoge
1
(let ((hoge 10))
(setq hoge 2)
(symbol-value 'hoge))
2
hoge
1 - ええっと。あまりいい例じゃないけど、ELの方は、setにしろsetqにしろ、letのhogeをみてるんだなきっと。とするとsetqはsetの便利版でいいんだろね。
- うーん。。。変数は難しい。ここの記述は確かに間違いではないのだが、変数をちゃんとわかっていないと、ちゃんと理解できない。
一章はけっこう長かった。
こつこつ。
0 件のコメント:
コメントを投稿