Turing 言語のコレクション

1980 年代初頭にトロント大学で開発された PASCAL 系列のプログラミング言語 Turing はコレクションと名づけられたおもしろい機能をもっています。 「型 T のコレクションとは、 型 T へのポインタの集合のインスタンスである」として定義してあります。

⇒ R. C. ホルト他著、 湯浅太一他訳 プログラミング言語 Turing 1990、 ISBN 4-7665-1075-5

コレクションは代入したり、 比較したり、 引数として渡したり、 bind したり、 const 宣言によって名前をつけたりすることはできない。 コレクションは副プログラムの中で宣言してはいけない。 (73 ページ)

コレクションはグローバルなシングルトンであり、 その要素の型が一対一で決まっています。 そのため、 コレクションによって要素の型を指定することが可能です。 ポインタ定義にコレクション識別子を使うとき、 そのコレクションに結びついている要素の型をコレクション識別子で表すわけです。

var slist: collection of
            record
              entry: integer
              next: pointer to slist
            end

var first: pointer to slist := nil(slist)

procedure slist_prepend(p: pointer to slist)
    slist(p).next := first
    first := p
end slist_prepend

var item: pointer to slist
new slist, item
slist(item).entry := 1
slist_prepend(item)