🎾
Education: Racket: Racket におけるリストの使い方とデータ構造
はじめに
Racket は、LISP の方言である Scheme から派生した動的型付け言語です。LISP での主要なデータ構造であるリストは、Racket においても重要です。
この記事では、Racket におけるリストの構造と使用方法を詳しく勉強します。
Racket におけるリスト
リストは、Racket における要素の集まりです。'()
のなかに各要素を空白で区切ってリストを作成します。
各要素には、数値、文字列などのさまざまなデータ型があります。
リストの例
Racket では、以下のように数値のリストを作成できます。なお、行頭の'
はリストをそのまま出力するためにつけています。
'(1 2 3 4 5)
このリストには、1
から5
までの 5つの要素が含まれています。リストは、数値だけでなく、文字列や論理値などさまざまな型のデータを含むことができます。
以下は、数値、文字列、論理値を含むリストの例です。
'(1 "hello" #t)
このリストには、数値の1
、文字列の"hello"
、論理値の#t
が含まれています。
リストの構造
リストは、コンスセルによる単方向リストで表現されます。コンスセルは car 部と cdr 部からなっており、car 部はリストの各要素、cdr 部は次のコンスセルへのポインタが入っています。リストの最後のセルは、cdr 部にエンドマークとして空のリスト'()
が入っています。
たとえば、以下のリストをコンスセルを使って図解すると
'(1 2 3)
コンスセルによる図解
+---+---+ +---+---+ +---+------+
| 1 | o-+---->| 2 | o-+---->| 3 | '() |
+---+---+ +---+---+ +---+------+
リストの各要素には、リストそのものを含めることができます。コンスセルの car 部にリストへのポインタが入ります。
この場合のコードはつぎのようになります。
'(1 (2 3) 4)
コンスセルで図解すると
リストのデータ構造
+---+---+ +---+---+ +---+---+
| 1 | o-+-->| o | o-+-->| 4 | / |
+---+---+ +---+---+ +---+---+
|
v
+---+---+---+
| 2 | 3 | / |
+---+---+---+
おわりに
この記事では、リストについて学習しました。
リストは、Racket において重要な概念の 1つであり、効果的なプログラミングのために欠かせない要素です。
Discussion