甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション12.2 Unbounded型の作成のためのアクセス変数の使用

Adaチュートリアル セクション12.2 Unbounded型の作成のためのアクセス変数の使用

E-mail Print PDF

セクション 12.2 - Unbounded型の作成のためのアクセス変数の使用

さて、整数値の長いリストを作成したいと考えてみましょう。私たちはこのリストを作成するにあたって、リスト上にどれだけの数の整数値が存在することになるか正確に知らないとします。固定された制限なく、情報の量が変化するものを格納する型はunbounded型と呼ばれています。このリストにどれだけの要素が存在するか知っている場合には、配列を使ってリストの値を作成することに使うことが出来ます。しかし、配列単独では、Unbounded型を簡単に実装するには不十分なのです。

Adaではプログラマーは不定量の情報を取り扱うのに、アクセス型を使用して実装することが出来ます。 (アクセス型は他の状況にも有効ですが、この使い方はその中でも確かに有効なものの一つです) 基本的なアイディアは、「ノード」と呼ばれる、次の二つの情報を格納する型を作成するというものです。

  1. プログラマーが取り扱いたいと考えるデータの一断片、と
  2. 関連するノードへの参照を含むひとつ、もしくはそれ以上のアクセス値。プログラマーは自身のデータの断片同士をアクセス値を使って「接続」することが可能となります。

それでは、早速始めましょう。複数の整数のリストを取り扱えるものを定義していきます。(技術的には、この例は整数の単一リンクリストというものです) 「ノード」型は、データの一断片、ここでは整数と、このリストの「次の」ノードを参照するリファレンスを持つように作成してみます。

  type List_Node is
    record
      Data        : Integer;
      Next        : List_Node_Access;  -- Next Node in the list.
    end record;

List_Nodeを作成するためには、私たちはアクセス型をひとつ、必要とします。私はこれをList_Node_Accessと呼ぶことにします。ここでは、List_Node_Accessの定義を掲載します。 (プログラマーは、List_Nodeの定義の前に、この定義を置かなければなりません)

  type List_Node_Access is access List_Node;

さて、問題があります。「List_Node」型は、List_Node_Access型の定義に依存しており、List_Node_Access型はList_Node型の定義に依存しているというものです。この連環問題、それぞれの型の定義がもう一方に依存しているに注意しましょう。この問題は、アクセス型を使用する場合に共通した状況です。Adaのルールによって、プログラマーは何かを使用しようとする前にそれを宣言しなければなりません。この問題は解けないように思えます。この問題を解決するには、まずノードに対し、「不完全型宣言」を使用するというものです。 (これは、CやPascalにおいても同様のことが行なえます) 不完全型宣言は、与えられた名前によって与えられた型が、後で定義されることをAdaコンパイラーに単純に約束するというものです。不完全型宣言は、キーワード「type」を取ります。型の名前は後で宣言しようとしているものであり、すぐにセミコロンで閉じます。たとえば、ここではプログラマーがList_NodeとList_Node_Accessをどのように定義すべきかを示しています。

  type List_Node;  -- An incomplete type declaration.
  type List_Node_Access is access List_Node;
  type List_Node is
    record
      Data        : Integer;
      Next        : List_Node_Access;  -- Next Node in the list.
    end record;

アクセス型の定義の後で、プログラマーは通常の変数宣言の書式を用いて、アクセス型の変数を宣言することができるようになります。たとえば、プログラマーはCurrentとRootの二つのアクセス変数を次のように作成することができます。

  Current, Root : Tree_Access;

出典: http://www.adahome.com/Tutorials/Lovelace/s12s2.htm

Last Updated on Wednesday, 04 April 2012 10:59  

ニュース速報

株式会社リナックスアカデミー主催、IPA(独立行政法人 情報処理推進機構)共催

Hadoop利用者向け研修「Hadoopの特徴と周辺技術および活用事例」