Schemeを覚える1
http://www.shido.info/lisp/idx_scm.html
↑このサイトに親切な説明が載っていたのでちょとずつ勉強
$ sudo apt-get install drscheme $ drscheme <これで起動できる
四則演算
> (* (+ 3 4) (- 5 2)) 21
コンスセル
http://www.shido.info/lisp/scheme3.html
コンスセルとは、アドレスを2つ入れられる入れ物。
(cons 1 2)とかく。
1が入っている部分をcar、2が入っている部分をcdrと呼ぶ。
> (cons 1 (cons 2 (cons 3 4))) (1 2 3 . 4)
コンスセルは入れ子にできる。
この辺からもう忘れそう
(1 2 3 . 4)は(1 . (2 . (3 . 4)))の省略系
リスト
一番最後のコンスセルが'()だったらリストと呼ぶ。
> (cons 1 (cons 2 (cons 3 '()))) (1 2 3)
お。リストっぽく表示された。
quote
リストやリテラルを作るときに使う?取り合えずこんな覚え方。これを使うと式として評価されない。
> (quote (1 2 3 4)) (1 2 3 4) > (quote (1 2 3 4)) (1 2 3 4) 省略形(シングルクォーテーションをつける) > (quote (1 2 3 4)) (1 2 3 4) > '(* (+ 3 4) (- 5 4)) (* (+ 3 4) (- 5 4))
関数のcar, cdr
コンスセルのcarの部分、cdrの部分を取得するための関数
> (car '(5 4 3)) 5 > (cdr '(5 4 3)) (4 3)
上の例の(5 4 3)というリストは、実際は、(cons 5 (cons 4 (cons 3 '()))という感じのリストなので、(cdr '(5 4 3))とすることで、コンスセルの2つ目の(cons 4 (cons 3 '())が返されることになる。
関数
> (define hello (lambda (name) (string-append "hello " name))) ; ここまでが関数定義 > (hello "hironemu") ; 関数を使ってみたところ "hello hironemu"
defineのあとの「hello」が関数名。lambdaの後に(name)が引数。ここはリストになる。(name age address)見たいな感じにかける。
lambdaは省略できる↓
> (define (hello name) (string-append "hello " name)) > (hello "hironemu") "hello hironemu"
だめだ、、疲れた。繰り返しのとこまでやったのにメモりきれない。続きは明日。
それまでにわすれてそーーー。ひぃ