next up previous contents index
Next: エンコーディング規則 Up: 例外的な処理 Previous: 例外的な処理

ヒープの使い方

 

KLICのコードでは、以下のようにヒープを利用する。

通常の述語実行中は、allocpなるポインタを介して そこからの相対アドレスをもってヒープアクセスをする。 述語開始時にはallocpはヒープ割付点を指しており、そこから相対アドレスで 正の方向は空領域である。 具体的には、コード中では allocp[x] ($x \ge 0$) なる記述でヒープアクセスが行われる。

例えば、以下の、nrev/2の1節の出力コードを例にとりヒープの割付の解説を行う。

nrev([A|X], Y) :- nrev(X, X1), append(X1, [A], Y).

この節のコードは、前述の84行目より109行目に出力されているが、ここでは以下の ようにヒープを利用している(図3.3参照)。以下で ヒープ割付に関連する部分のみコンパイルドコードを掲載するとともに 解説する(全体のコードは第3.5章 ([*]ページ)に再掲する)。


  
Figure 3.3: ヒープ割付の説明
\begin{figure}\begin{center}
\epsfile{file=heap-alloc.eps,width=.6\textwidth}
\end{center}\end{figure}



Sekita Daigo
1998-05-18