(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

Schemeのリストを探す旅

もうひとつのScheme入門を読みながら今リストを作るところを勉強中。

進捗が遅いのにはふれないでください。
(Emacsの設定して遊んだり、Scheme手習いを読んだり、他にも色々本を読んでいるのです。)

一旦、脳内整理。<<今日の出来事>>

(cons 1 ())
が
(1)

になるのがどうしても理解できなくて、Twitterで嘆いてみた。
んー。やっぱ、(cons 1 ())が(1)になるのが納得できないっていう。。。

僕の考えとしては

(1 . ())

となってくれないと気持ち悪いということで困っていたら
@cryksさんと@vavalowさんから

(1)

(1 . ())

の略記で同義だと言われ白目…。
とりあえず、これはそれで納得。

しかし、Scheme。君はどうしてそんなに同じモノでも表現方法が沢山あるんだい?

ということで、練習問題を解いていたんだけどlistとquoteの違いがよく分からないとなって、下の問題をそれぞれの方法で解いてみた。

問:処理系が次のように表示するデータ構造を cons で作ってください。
("Sum of" (1 2 3 4) "is" 10)
解:
;consだけで書くと
(cons "Sum of"
      (cons
       (cons 1 (cons 2 (cons 3 (cons 4 ()))))
       (cons "is"
	     (cons 10 ()))))

;quoteを使うと
(quote ("Sum of" (1 2 3 4) "is" 10))
;もしくは
'("Sum of" (1 2 3 4) "is" 10)

;listを使うと
(list "Sum of" (list 1 2 3 4) "is" 10)

こうするとなんとなく違いが理解できる。
むしろこうするまで、quoteとlistって同じじゃないの…?って思ってた。

ということで脳内整理終了。



Scheme手習い

Scheme手習い