Lips-interaction-mode に切り替えるには
Esc -x と打ちmini baffer にて
Lisp-interaction-modeと入力する。
今、自分がどのモードに入るのかは、画面下の()内に
(Lisp Interaction)と表示されている。
単純な四則演算について、
( 演算記号 数値)の規則で計算ができる。
(+ 1 2 3 4 ) ==> 10
なんだが普通の計算と順番が番うだろう。
だけどどちらが合理的かわかるかな?
君が命令するときに、1 + 2 + 3 + 4 と命令すると、
コンピュータは、1が入った時は、次の命令がなんだか
わかるまで動けないよね、
+が来てなんだ足し算をするのね。
それで、何を足すのか?と遊びの時間がでてしまう。
でもこんな風に命令すると、「足し算をしろ」
「1 2 3 4」なんてこられると、
足し算をしろという命令で足し算の計算準備ができていると
数字が来たときには、計算準備完了なんだ。
もし100000回くらい繰り返せばどっちが有利かわかるよね。
君の人生の秒数は?(* 20年 365日 24時間 60分 60秒)
として、この計算をlispにさせるには
(* 20 365 24 60 60)
で良いことにになる。
すごい数でしょ。こんな商売したら必ず儲かるよ。
こんな感じ、一円玉を1億個くらい用意するんだ。
そして参加費100万円で、この一円玉の数を正確に数えられた
人にその一円玉をあげるというゲームだ。
実はこの話には裏があって、参加者が「お前は本当に正しく数えたのか?」
と言われ、その一円玉を途方もなく眺めて一年経ったという話・・
でも人間は、意外と根性がないから1000まで数字をまちいなく順序正しく
言えたら1000円、10000までなら10000円あげるよと言っても
成功できるような人間はいないだろう。
(/ (* (- 80 20) 365 24) 3)はどんな計算か、
(/ (* (- 80歳 20歳) 365日 24時間) 3分の1)なのだ、
君は人生の1/3が睡眠時間なんて生活をしているよね、
多分8時間くらい寝ているんでしょ。
80歳までに175,200時間も寝るんだよ。
うーん なんとかならんか・・
最近は老後の睡眠ではないが寝たきりの時間が多くて、
健康寿命が縮まっているようだが。
形容詞 hot, thirsty, tired, fine, hungry,glad
これを並べてこのように表現してみよう。
(hot thirsty tired fine hungry glad)
ここから、このデータ群の先頭と後ろの部分を
定義することにする。
先頭を取り出すのに必要な命令は
car
後ろを取り出すのに必要な命令が
cdr
である。
エラーが出る。理由は、lispがcarというコマンドと
その次のデータとの判別がつかないからだ。
ここは、一番大切なことなんだが、命令や変数、関数などは
その文字の組み合わせに、それぞれの役割があるから、
その通りコンピュータは動く。
メニューリストにない行動はしない。
当たり前だろ?
勝手に動くということを暴走という。
データは、データであるという宣言をしないとコンピュータは間違う、
コマンドだと勘違いすると、そのコマンドのプログラムを探し回るんだよ。
「どこにも、ないぜ・・」とエラーを返す。
きちんとデータと宣言したら、
データのリストとしてあつかったので
そのリストの一番先頭のデータを取り出し、
hot という答えを返した。
cdr を実施したら、先頭のデータを取り除いた残りの
リストを返した。
よく見て欲しい、この返り値には( )が付いている。
から、ここらで、変数を作ってそこにデータを入れよう。
ただしlispは、文字列の組み合わせのタグが
データに紐付いているというイメージだと思って欲しい。
このイメージで注意して欲しいのは、
メモリに書いた番地が01番地に10が入っていたとしよう。
その10番地に紐付いた記号がtenとしたら、
tenを読み込んだlispは10番地まで行って、
10というデータを探してくる。
もし、20番地にも10が入っていてten2
というタグが付いていたら
ten == ten2 が等しいという概念と
等しくないという概念が存在する。
等しいという概念は、 10==10であるという概念、
等しくない概念は、メモリ番地が違うから、
tenの10とten2の10ば別物であるという概念だ。
この概念は、uniq という考えではとても必要であり、
線形代数でも学んだと思うが真のデータはどこ
すいません - 大丈夫です。