Chapter 2 データ型 - 2.2 合成データ型 - 2.2.2 ベクタ

配列とか「リスト」と呼ばれるものとは違うのかな? 多次元を扱えるトコが良いトコ? 処理も入る「リスト」と分けて「データ」というのを強調してるのかな?

gosh> (vector 0 1 2 3 4)
#(0 1 2 3 4)

#(...) が簡略記法ってこと?

gosh> #(0 1 2 3 4)
#(0 1 2 3 4)

まさに。


文字型も入るかな?

gosh> (vector #\H #\e #\l #\l #\o)
#(#\H #\e #\l #\l #\o)

うん。


混合はどうよ?

gosh> (vector 0 "h" 1 "e" 2 "l" 3 "l" 4 "o")
#(0 "h" 1 "e" 2 "l" 3 "l" 4 "o")

うん。

make-vector で空ベクタを作れる:

gosh> (define v (make-vector 5))
v
gosh> v
#(#<undef> #<undef> #<undef> #<undef> #<undef>)

make-string は半角スペースで埋まってたけど、これは undef だなぁ。色んな型が入るからだろうけど。


string と同じく "vector-ref ベクタ インデックス" で get。"vector-set! ベクタ インデックス オブジェクト" で set。

gosh> (vector-ref v 2)
#<undef>
gosh> (vector-set! v 2 "l")
#<undef>
gosh> (vector-ref v 2)
"l"
gosh> v
#(#<undef> #<undef> "l" #<undef> #<undef>)
gosh> (vector-set! v 0 "H")
#<undef>
gosh> (vector-set! v 1 "e")
#<undef>
gosh> (vector-set! v 3 "l")
#<undef>
gosh> (vector-set! v 4 "o")
#<undef>
gosh> v
#("H" "e" "l" "l" "o")

今日はここまで。