リスト

リストはデータを括弧でくくったもの。リストには手続きとデータがあり、データは'(クォート)をリストの前につける。

(+ 1 2) ; 手続きのリスト。評価すると3が返る。
'(1 2 3) ; データのリスト。評価すると(1 2 3)が返る。

リストの基本操作

  • リストの先頭の要素を読むcar
  • リストの先頭以外のの要素を返すcdr
  • 先頭要素と、残りの要素からなるリストをくっつけるcons
gosh> (car '(1 2 3))
1
gosh> (cdr '(1 2 3))
(2 3)
gosh> (cons 1 '())
(1)

空リストにcarとcdrを実行するとエラー。

gosh> (car '())
*** Error: pair required, but got ()
gosh> (cdr '())
*** ERROR: pair required, but got ()

consの第2引数にリスト以外を渡すとドットリストが作成される。

gosh> (cons 1 2)
(1 . 2)
  • 引数が空リストかどうか判定する手続きnull?
  • 引数が空リストでないリストかどうか判定する手続きpair?
gosh> (null? '())
#t
gosh> (null? '(1 2))
#f
gosh> (pair? '())
#f
gosh> (pair? '(1 2))
#t

ということで、今日は6.2まで。

疑問1.carとcdrは、なんと読むんだろう?
疑問2.ドットリストって何だ?本によると、要素の最後が空リストでないリストをドットリストといっているようだが・・。
疑問3.Gauche(Scheme)には予約語がないということだが、拡張性が高まるからなのだろうか。