JPH04340626A - 継承階層論理型言語の処理方法 - Google Patents
継承階層論理型言語の処理方法Info
- Publication number
- JPH04340626A JPH04340626A JP11286391A JP11286391A JPH04340626A JP H04340626 A JPH04340626 A JP H04340626A JP 11286391 A JP11286391 A JP 11286391A JP 11286391 A JP11286391 A JP 11286391A JP H04340626 A JPH04340626 A JP H04340626A
- Authority
- JP
- Japan
- Prior art keywords
- clause
- cell
- predicate
- pointer
- stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は継承階層を陽に扱う論理
型言語の処理方法に関するものである。
型言語の処理方法に関するものである。
【0002】
【従来の技術】Prologは論理型言語として広く使
用されているが、これは、個別の事物のみを記述の対象
としている。これに対し、個別の事物を意味的に含む一
般的な概念も記述の対象とすることにより、継承階層の
表現・検索を効率的に実現しようとするものに、PAL
(赤間 ”PAL:継承階層を扱う拡張Prolog”
情報処理学会論文誌, Vol.28, pp322
−329, 1987参照)、LOGIN(Ait−K
aci &Nasr ”LOGIN:A Logic
Programming Language with
Built−In Inheritance” Jo
urnal of Logic Programmin
g, Vol.3, pp185−215, 1986
参照)、EPOS(Huber.M & Varsek
.I”Extended Prolog for Or
der−SortedResolution” ’87
International Symposium
on Logic Programming pp34
−43参照)などがある。こういった継承階層を陽に扱
う論理型言語を以後は、「継承階層論理型言語」と呼ぶ
ことにする。これの記述形式は言語毎に異なるが、以下
では、分かりやすさのため、日本語によるProlog
風の記述形式を用いることとする。
用されているが、これは、個別の事物のみを記述の対象
としている。これに対し、個別の事物を意味的に含む一
般的な概念も記述の対象とすることにより、継承階層の
表現・検索を効率的に実現しようとするものに、PAL
(赤間 ”PAL:継承階層を扱う拡張Prolog”
情報処理学会論文誌, Vol.28, pp322
−329, 1987参照)、LOGIN(Ait−K
aci &Nasr ”LOGIN:A Logic
Programming Language with
Built−In Inheritance” Jo
urnal of Logic Programmin
g, Vol.3, pp185−215, 1986
参照)、EPOS(Huber.M & Varsek
.I”Extended Prolog for Or
der−SortedResolution” ’87
International Symposium
on Logic Programming pp34
−43参照)などがある。こういった継承階層を陽に扱
う論理型言語を以後は、「継承階層論理型言語」と呼ぶ
ことにする。これの記述形式は言語毎に異なるが、以下
では、分かりやすさのため、日本語によるProlog
風の記述形式を用いることとする。
【0003】継承階層論理型言語の扱う知識は、継承階
層とファクト節とルール節とゴール節からなる。ファク
ト節とルール節を合わせてプログラム節という。以下に
例を示す。
層とファクト節とルール節とゴール節からなる。ファク
ト節とルール節を合わせてプログラム節という。以下に
例を示す。
【0004】例1)■Johnは人に属する。
【0005】■Bobは人に属する。
【0006】■Maryは人に属する。
【0007】■cs1は職場に属する。
【0008】■Johnはcs1で働く。
【0009】■cs1の管理者はBobである。
【0010】■人の働く職場の管理者がXなら、Xはそ
の人の上司である。
の人の上司である。
【0011】■BobはMaryの管理者である。
【0012】■cs1で働く者とその上司は?例えば、
例1を継承階層論理型言語で表現するなら、■・■・■
・■・■・■・■・■・■はそれぞれ、S1・S2・S
3・S4・S5・S6・S7・S8・Q1のように表さ
れる。S1・S2・S3・S4は継承階層。S5・S6
・S8はファクト節、S7はルール節、Q1はゴール節
である。各節の ”←” の左辺部をヘッド部、右辺部
をボディ部と呼ぶ。
例1を継承階層論理型言語で表現するなら、■・■・■
・■・■・■・■・■・■はそれぞれ、S1・S2・S
3・S4・S5・S6・S7・S8・Q1のように表さ
れる。S1・S2・S3・S4は継承階層。S5・S6
・S8はファクト節、S7はルール節、Q1はゴール節
である。各節の ”←” の左辺部をヘッド部、右辺部
をボディ部と呼ぶ。
【0013】
John<人
(S1) Bob<人
(S2) Mary<人
(S3)
cs1<職場
(S4) 働く(John,
cs1)←
(
S5) 管理者(cs1, Bob)←
(S6) 上司(人
:X,人:Y)← 働く(人:Y,職場:Z),
管理者(
職場:Z,人:X)
(S7) 上司(Bob, Mary)←
(S8)
← 働く(人:V,cs1), 上司(人:W,人:
V)
(Q1)ここで、”John”・”Bob”・”Mar
y”・”cs1”は定数、”人”・”職場”は領域、”
働く”・”管理者”・”上司”は述語である。dを領域
、xを変数とするとき、”d:x”は変数xがdに属す
る定数のみを値としてとることを示す。”d:x”と定
数を項とよぶ。Pを述語、t1,…,tnを項とすると
き、P(t1,…,tn)を基本式とよぶ。”働く(J
ohn, cs1)”・”管理者(cs1, Bob)
”・”上司(人:X,人:Y)”などは基本式である。 また、”<”の関係は推移的であり、かつ非対称的であ
るとする。すなわち、a1<a2かつa2<a3ならば
、a1<a3であり、かつ、a1<a2とa2<a1が
同時に成り立つことはない。
(S1) Bob<人
(S2) Mary<人
(S3)
cs1<職場
(S4) 働く(John,
cs1)←
(
S5) 管理者(cs1, Bob)←
(S6) 上司(人
:X,人:Y)← 働く(人:Y,職場:Z),
管理者(
職場:Z,人:X)
(S7) 上司(Bob, Mary)←
(S8)
← 働く(人:V,cs1), 上司(人:W,人:
V)
(Q1)ここで、”John”・”Bob”・”Mar
y”・”cs1”は定数、”人”・”職場”は領域、”
働く”・”管理者”・”上司”は述語である。dを領域
、xを変数とするとき、”d:x”は変数xがdに属す
る定数のみを値としてとることを示す。”d:x”と定
数を項とよぶ。Pを述語、t1,…,tnを項とすると
き、P(t1,…,tn)を基本式とよぶ。”働く(J
ohn, cs1)”・”管理者(cs1, Bob)
”・”上司(人:X,人:Y)”などは基本式である。 また、”<”の関係は推移的であり、かつ非対称的であ
るとする。すなわち、a1<a2かつa2<a3ならば
、a1<a3であり、かつ、a1<a2とa2<a1が
同時に成り立つことはない。
【0014】質問処理手順を、S1〜S8を知識として
、Q1を質問としたときの具体例により説明する。
、Q1を質問としたときの具体例により説明する。
【0015】1)Q1のボディ部の一番左にある基本式
”働く(人:V,cs1)”を選ぶ。これを「選択式
」とよぶ。 知識の中からこれと同じ述語をもつ節をひとつ選ぶ。こ
れを「入力節」とよぶ。ここではS5の ”働く(Jo
hn, cs1)←” を入力節とする。選択式の ”
人:V” を ”John” に置き換えることによっ
て選択式と入力節とは同一となる。このことを「代入{
人:V/John}により選択式と入力節との単一化処
理に成功する」という。すべての変数を定数によって置
き換える代入を基礎代入という。
”働く(人:V,cs1)”を選ぶ。これを「選択式
」とよぶ。 知識の中からこれと同じ述語をもつ節をひとつ選ぶ。こ
れを「入力節」とよぶ。ここではS5の ”働く(Jo
hn, cs1)←” を入力節とする。選択式の ”
人:V” を ”John” に置き換えることによっ
て選択式と入力節とは同一となる。このことを「代入{
人:V/John}により選択式と入力節との単一化処
理に成功する」という。すべての変数を定数によって置
き換える代入を基礎代入という。
【0016】項t2を項t1に置き換えてよいのは次の
いずれかである。ただし、c1は定数、d1・d2は領
域、x1・x2は変数である。
いずれかである。ただし、c1は定数、d1・d2は領
域、x1・x2は変数である。
【0017】・t2がd2:x2、項t1がc1の形を
しているときは、c1<d2の場合。
しているときは、c1<d2の場合。
【0018】・t2がd2:x2、項t1がd1:x1
の形をしているときは、d1<d2の場合。
の形をしているときは、d1<d2の場合。
【0019】単一化処理に成功すれば、ゴール節から選
択式を除き、入力節にボディ部があればそれをゴール節
に加えたものに、前の代入を施し、これを新たなゴール
節とする。この処理を「導出」とよぶ。ここでは導出に
より、 ← 上司(人:W,John)
(Q2)が新たなゴール節となる。
択式を除き、入力節にボディ部があればそれをゴール節
に加えたものに、前の代入を施し、これを新たなゴール
節とする。この処理を「導出」とよぶ。ここでは導出に
より、 ← 上司(人:W,John)
(Q2)が新たなゴール節となる。
【0020】2)”上司(人:W,John)”を選択
式とし、S7の 上司(人:X,人:Y)← 働く(人:Y,職場:Z)
, 管理者(職場:Z,人:X)を入力節とする。代入
{人:X/人:W,人:Y/John}により単一化処
理に成功する。新たなゴール節は ← 働く(John,職場:Z), 管理者(
職場:Z,人:W) (
Q3)となる。
式とし、S7の 上司(人:X,人:Y)← 働く(人:Y,職場:Z)
, 管理者(職場:Z,人:X)を入力節とする。代入
{人:X/人:W,人:Y/John}により単一化処
理に成功する。新たなゴール節は ← 働く(John,職場:Z), 管理者(
職場:Z,人:W) (
Q3)となる。
【0021】3)”働く(John,職場:Z)”を選
択式とし、S5の ”働く(John, cs1)←
” を入力節とする。代入{職場:Z/cs1}によ
り単一化処理に成功する。新たなゴール節は ← 管理者(cs1,人:W)
(Q4)となる。
択式とし、S5の ”働く(John, cs1)←
” を入力節とする。代入{職場:Z/cs1}によ
り単一化処理に成功する。新たなゴール節は ← 管理者(cs1,人:W)
(Q4)となる。
【0022】4)”管理者(cs1,人:W)”を選択
式とし、S5の ”管理者(cs1, Bob)←”
を入力節とする。代入{人:W/Bob}により単
一化処理に成功する。このとき、ゴール節の中身はなく
なるが、このことを「空節が導出される」という。空節
が導出されたならば、今までの代入{人:V/John
}・{人:X/人:W,人:Y/John}・{職場:
Z/cs1}・{人:W/Bob}を合成した代入{人
:V/John,人:X/Bob,人:Y/John,
職場:Z/cs1,人:W/Bob}のうち、Q1内の
変数に関する{人:V/John,人:W/Bob}を
求める。この代入を「正解代入」という。
式とし、S5の ”管理者(cs1, Bob)←”
を入力節とする。代入{人:W/Bob}により単
一化処理に成功する。このとき、ゴール節の中身はなく
なるが、このことを「空節が導出される」という。空節
が導出されたならば、今までの代入{人:V/John
}・{人:X/人:W,人:Y/John}・{職場:
Z/cs1}・{人:W/Bob}を合成した代入{人
:V/John,人:X/Bob,人:Y/John,
職場:Z/cs1,人:W/Bob}のうち、Q1内の
変数に関する{人:V/John,人:W/Bob}を
求める。この代入を「正解代入」という。
【0023】5)”管理者(cs1,人:W)”を選択
式とし、S5以外の入力節を捜す。これが存在すれば、
選択式と入力節との単一化を試みる。ここでは存在しな
いので、手順3)の状態に戻る。これを「バックトラッ
ク」という。
式とし、S5以外の入力節を捜す。これが存在すれば、
選択式と入力節との単一化を試みる。ここでは存在しな
いので、手順3)の状態に戻る。これを「バックトラッ
ク」という。
【0024】6)”働く(John,職場:Z)”を選
択式とし、S4以外の入力節を捜す。存在しないので、
手順2)の状態にバックトラックする。
択式とし、S4以外の入力節を捜す。存在しないので、
手順2)の状態にバックトラックする。
【0025】7)”上司(人:W,John)”を選択
式とし、S6以外の入力節を捜す。S8の ”上司(B
ob, Mary)←” がえられるが、単一化処理に
失敗する。
式とし、S6以外の入力節を捜す。S8の ”上司(B
ob, Mary)←” がえられるが、単一化処理に
失敗する。
【0026】8)”上司(人:W,John)”を選択
式とし、S6とS8以外の入力節を捜す。存在しないの
で、手順1)の状態にバックトラックする。
式とし、S6とS8以外の入力節を捜す。存在しないの
で、手順1)の状態にバックトラックする。
【0027】9)”働く(人:V,cs1)”を選択式
とし、S5以外の入力節を捜す。存在せず、かつ、もど
る手順も残っていないので、質問処理は終了する。
とし、S5以外の入力節を捜す。存在せず、かつ、もど
る手順も残っていないので、質問処理は終了する。
【0028】
(∀X/d B(X)→A(X))∧(∃X/d B(
X))というタイプの多ソート論理式を考える。これは
、領域dに属する全ての変数Xに対して、B(X)→A
(X)が成り立ち、領域dに属するある変数Xに対して
、B(X)が成り立つことを意味する。(例えば、「t
大学が購入したコンピュータはすべてa社が製造した」
という連体修飾を含む命題は多ソート論理式では(∀X
/コンピュータ 購入した(t大学,X)→製造した(
a社,X))∧(∃X/コンピュータ 購入した(t大
学,X))のように、このタイプの論理式として表すこ
とができる)これを継承階層論理型言語で表現すると、 A(d:X)←B(d:X)
(S9) B(c1)
(S10
)となる。B(c1)は、∃X/d B(X)をスコー
レム化したものであり、c1は領域dに属する定数であ
る。これに対し、d<d’であるとき、 ←A(d’:Y)
(Q5)という質問処理を実行す
ると、まず、代入{d’:Y/d:X}により、Q5は
S9との単一化処理に成功し、”←B(d:X)” が
新たなゴール節として得られ、次に、代入{d:X/c
1}により、これはS10との単一化に成功し、空節が
導出される。以上、2回の単一化により、正解代入{d
’:Y/cs1}を得ることができる。
X))というタイプの多ソート論理式を考える。これは
、領域dに属する全ての変数Xに対して、B(X)→A
(X)が成り立ち、領域dに属するある変数Xに対して
、B(X)が成り立つことを意味する。(例えば、「t
大学が購入したコンピュータはすべてa社が製造した」
という連体修飾を含む命題は多ソート論理式では(∀X
/コンピュータ 購入した(t大学,X)→製造した(
a社,X))∧(∃X/コンピュータ 購入した(t大
学,X))のように、このタイプの論理式として表すこ
とができる)これを継承階層論理型言語で表現すると、 A(d:X)←B(d:X)
(S9) B(c1)
(S10
)となる。B(c1)は、∃X/d B(X)をスコー
レム化したものであり、c1は領域dに属する定数であ
る。これに対し、d<d’であるとき、 ←A(d’:Y)
(Q5)という質問処理を実行す
ると、まず、代入{d’:Y/d:X}により、Q5は
S9との単一化処理に成功し、”←B(d:X)” が
新たなゴール節として得られ、次に、代入{d:X/c
1}により、これはS10との単一化に成功し、空節が
導出される。以上、2回の単一化により、正解代入{d
’:Y/cs1}を得ることができる。
【0029】
B(X)=B1(X)∧…∧Bn(X)のときは、知識
は、 A(d:X)←B1(d:X),…,Bn
(d:X)
(S11)となり、Q5を質問としたとき、n+
1回の単一化処理で、正解代入が得られる。本発明では
、上の両方の場合に対し、1回または2回の単一化処理
で、正解代入が得られる処理方式を提供する。
は、 A(d:X)←B1(d:X),…,Bn
(d:X)
(S11)となり、Q5を質問としたとき、n+
1回の単一化処理で、正解代入が得られる。本発明では
、上の両方の場合に対し、1回または2回の単一化処理
で、正解代入が得られる処理方式を提供する。
【0030】
【課題を解決するための手段】S9・S10は、S11
・S12を、n=1としたものであるので、以下では、
S11・S12のみを考える。
・S12を、n=1としたものであるので、以下では、
S11・S12のみを考える。
【0031】S11・S12がひとまとまりの知識とし
て与えられているものとする。ここでは、ヘッド部とボ
ディ部が ”←^” という記号でつながれた新たな記
述形式を仮定し、これを連体修飾節とよぶことにする。 連体修飾節もプログラム節の一つである。S11・S1
2は、連体修飾節として、 A(X)←^ B1(X),…,Bn(X)
(S13)と表されているものとする。まず、
S13を内部的に、S11・S12・S14のように展
開する。
て与えられているものとする。ここでは、ヘッド部とボ
ディ部が ”←^” という記号でつながれた新たな記
述形式を仮定し、これを連体修飾節とよぶことにする。 連体修飾節もプログラム節の一つである。S11・S1
2は、連体修飾節として、 A(X)←^ B1(X),…,Bn(X)
(S13)と表されているものとする。まず、
S13を内部的に、S11・S12・S14のように展
開する。
【0032】
A(c1)
(S14)この際、S11のA(
d:X)のデータエリア内にA(c1)へのポインタを
保持し、B1(X)〜Bn(X)のそれぞれのデータエ
リア内に、B1(c1)〜Bn(c1)へのポインタを
保持する。そして、質問処理の過程において、S11が
入力節として選ばれて単一化処理に成功したならば、S
12・S14が入力節として選ばれることがないように
マスクをかける。入力節としてのS11の処理が終われ
ばマスクをはずす。
(S14)この際、S11のA(
d:X)のデータエリア内にA(c1)へのポインタを
保持し、B1(X)〜Bn(X)のそれぞれのデータエ
リア内に、B1(c1)〜Bn(c1)へのポインタを
保持する。そして、質問処理の過程において、S11が
入力節として選ばれて単一化処理に成功したならば、S
12・S14が入力節として選ばれることがないように
マスクをかける。入力節としてのS11の処理が終われ
ばマスクをはずす。
【0033】ルール節およびファクト節を有するプログ
ラム節を処理対象とする継承階層論理型言語処理系にお
いて、ルール節のボディ部の基本式を満足する基礎代入
が知られているルール節に対して、そのルール節のヘッ
ド部およびボディ部の各基本式にその基礎代入を行った
ファクト節とその参照可否情報とをメモリに格納し、ゴ
ール節の処理中、入力節として選択されたルール節の処
理開始時に当該ルールのヘッド部およびボディ部の各基
本式の基礎代入例であるファクト節の参照可否情報を参
照不可に設定し、当該ルール節の処理終了時に、参照可
否情報を参照可に再設定し、参照可否情報が参照不可と
設定されているファクト節は入力節として選択しないこ
とを特徴とする。
ラム節を処理対象とする継承階層論理型言語処理系にお
いて、ルール節のボディ部の基本式を満足する基礎代入
が知られているルール節に対して、そのルール節のヘッ
ド部およびボディ部の各基本式にその基礎代入を行った
ファクト節とその参照可否情報とをメモリに格納し、ゴ
ール節の処理中、入力節として選択されたルール節の処
理開始時に当該ルールのヘッド部およびボディ部の各基
本式の基礎代入例であるファクト節の参照可否情報を参
照不可に設定し、当該ルール節の処理終了時に、参照可
否情報を参照可に再設定し、参照可否情報が参照不可と
設定されているファクト節は入力節として選択しないこ
とを特徴とする。
【0034】
【作用】本発明では質問処理を実行したとき、選択式が
Q5であれば、S14またはS11が入力節として選ば
れる可能性がある。S14が入力節として選ばれたなら
ば、代入{d’:Y/c1}により、1回の単一化処理
で正解代入を得ることができる。また、S11が入力節
として選ばれたならば、代入{d’:Y/d:X}によ
り、Q5とS11との単一化処理に成功するが、S12
にはマスクがかけられているので、これらが入力節とし
て選ばれることはない。すなわち、本発明では1回また
は2回の単一化処理で正解代入を得ることができる。
Q5であれば、S14またはS11が入力節として選ば
れる可能性がある。S14が入力節として選ばれたなら
ば、代入{d’:Y/c1}により、1回の単一化処理
で正解代入を得ることができる。また、S11が入力節
として選ばれたならば、代入{d’:Y/d:X}によ
り、Q5とS11との単一化処理に成功するが、S12
にはマスクがかけられているので、これらが入力節とし
て選ばれることはない。すなわち、本発明では1回また
は2回の単一化処理で正解代入を得ることができる。
【0035】
【実施例】以下、本発明の一実施例を、図面により詳細
に説明する。
に説明する。
【0036】図1は、本発明の実施例においてプログラ
ム節を格納するデータ構造を表す図、図2は、質問ゴー
ル節処理で使用するスタックのデータ構造を表す図、図
3は、質問ゴール節処理を表すフローチャート、図4は
、質問ゴール節処理における入力節選択処理の詳細を表
すフローチャート、図5から図7は、質問ゴール節処理
の過程におけるスタックの状態を表す図、図8は、プロ
グラム節入力時に使用する変数名テーブルのデータ構造
を表す図、図9は、入力プログラム節の格納処理を表す
フローチャート、図10は、入力プログラム節の格納処
理における連体修飾節格納処理の詳細を表すフローチャ
ート、図11は、連体修飾節格納処理における具象化フ
ァクト節格納処理の詳細を表すフローチャート、図12
は、本発明の方法を実施するための装置構成例を表す図
である。
ム節を格納するデータ構造を表す図、図2は、質問ゴー
ル節処理で使用するスタックのデータ構造を表す図、図
3は、質問ゴール節処理を表すフローチャート、図4は
、質問ゴール節処理における入力節選択処理の詳細を表
すフローチャート、図5から図7は、質問ゴール節処理
の過程におけるスタックの状態を表す図、図8は、プロ
グラム節入力時に使用する変数名テーブルのデータ構造
を表す図、図9は、入力プログラム節の格納処理を表す
フローチャート、図10は、入力プログラム節の格納処
理における連体修飾節格納処理の詳細を表すフローチャ
ート、図11は、連体修飾節格納処理における具象化フ
ァクト節格納処理の詳細を表すフローチャート、図12
は、本発明の方法を実施するための装置構成例を表す図
である。
【0037】図1により、プログラム節の格納形式を説
明する。
明する。
【0038】本実施例では、プログラム節を、述語名と
プログラム節の格納位置の対応を表すインデクスセル格
納エリア101と、プログラム節のヘッド部を格納する
述語セル格納エリア102と、プログラム節のボディ部
を格納するボディ部述語セル格納エリア103に分けて
格納する。
プログラム節の格納位置の対応を表すインデクスセル格
納エリア101と、プログラム節のヘッド部を格納する
述語セル格納エリア102と、プログラム節のボディ部
を格納するボディ部述語セル格納エリア103に分けて
格納する。
【0039】インデクスセル格納エリア101は、述語
名フィールド105と述語セルポインタ106を組とし
たインデクスセル104を格納するエリアである。述語
名フィールド105には、プログラム節の述語名を格納
する。述語セルポインタ106には、述語名フィールド
105に格納された述語名を持つプログラム節のヘッド
部が格納されている単一あるいは複数の述語セル107
の先頭アドレスを格納する。
名フィールド105と述語セルポインタ106を組とし
たインデクスセル104を格納するエリアである。述語
名フィールド105には、プログラム節の述語名を格納
する。述語セルポインタ106には、述語名フィールド
105に格納された述語名を持つプログラム節のヘッド
部が格納されている単一あるいは複数の述語セル107
の先頭アドレスを格納する。
【0040】述語セル格納エリア102は、マスクフラ
グ108、ヘッド部節フィールド109、マスク述語セ
ルポインタ110、および、ボディ部ポインタ111を
組とした述語セル107を格納するエリアである。マス
クフラグ108は質問ゴール節処理における入力節選択
処理で選択の可否を表す情報である。以下では、マスク
フラグ108の値が1であるとき選択不可であるとし、
値が0であるとき選択可とする。また、マスクフラグ1
08の値を1とすることを「マスクフラグを設定する」
といい、値を0とすることを「マスクフラグを解除する
」という。ヘッド部節フィールド109には、ファクト
節、ルール節のヘッド部および連体修飾節のヘッド部を
格納する。マスク述語セルポインタ110には、当該述
語セルのヘッド部節フィールドに格納されている節が連
体修飾節のヘッド部であるとき、格納時にその連体修飾
節のヘッド部の変数を定数化して生成した具象化ファク
ト節を格納した述語セルのアドレスを格納する。当該述
語セルのヘッド部節フィールドに格納されている節がフ
ァクト節あるいは、ルール節のヘッド部であるときには
、マスク述語セルポインタはNULL(無効ポインタを
表す)である。ボディ部ポインタ111は、当該述語セ
ルのヘッド部節フィールドに格納されている節がルール
節のヘッド部あるいは連体修飾節のヘッド部であるとき
、ボディ部の先頭の節を格納したボディ部述語セル11
2のアドレスを格納する。
グ108、ヘッド部節フィールド109、マスク述語セ
ルポインタ110、および、ボディ部ポインタ111を
組とした述語セル107を格納するエリアである。マス
クフラグ108は質問ゴール節処理における入力節選択
処理で選択の可否を表す情報である。以下では、マスク
フラグ108の値が1であるとき選択不可であるとし、
値が0であるとき選択可とする。また、マスクフラグ1
08の値を1とすることを「マスクフラグを設定する」
といい、値を0とすることを「マスクフラグを解除する
」という。ヘッド部節フィールド109には、ファクト
節、ルール節のヘッド部および連体修飾節のヘッド部を
格納する。マスク述語セルポインタ110には、当該述
語セルのヘッド部節フィールドに格納されている節が連
体修飾節のヘッド部であるとき、格納時にその連体修飾
節のヘッド部の変数を定数化して生成した具象化ファク
ト節を格納した述語セルのアドレスを格納する。当該述
語セルのヘッド部節フィールドに格納されている節がフ
ァクト節あるいは、ルール節のヘッド部であるときには
、マスク述語セルポインタはNULL(無効ポインタを
表す)である。ボディ部ポインタ111は、当該述語セ
ルのヘッド部節フィールドに格納されている節がルール
節のヘッド部あるいは連体修飾節のヘッド部であるとき
、ボディ部の先頭の節を格納したボディ部述語セル11
2のアドレスを格納する。
【0041】ボディ部述語セル格納エリア103は、ボ
ディ部節フィールド113、マスク述語セルポインタ1
14、および、ボディ部次節ポインタ115を組とした
ボディ部述語セル112を格納するエリアである。ボデ
ィ部節フィールド113は、ルール節および連体修飾節
のボディ部を構成する各節を一つずつ格納する。マスク
述語セルポインタ114は、当該ボディ部述語セル11
2に格納された節が連体修飾節のボディ部の節の一つで
あるとき、格納時にそのボディ部の節の変数を定数化し
て生成した具象化ファクト節を格納した述語セル107
のアドレスを格納する。ボディ部次節ポインタ115は
、ボディ部を構成する次の節を格納したボディ部述語セ
ル112のアドレスを格納する。
ディ部節フィールド113、マスク述語セルポインタ1
14、および、ボディ部次節ポインタ115を組とした
ボディ部述語セル112を格納するエリアである。ボデ
ィ部節フィールド113は、ルール節および連体修飾節
のボディ部を構成する各節を一つずつ格納する。マスク
述語セルポインタ114は、当該ボディ部述語セル11
2に格納された節が連体修飾節のボディ部の節の一つで
あるとき、格納時にそのボディ部の節の変数を定数化し
て生成した具象化ファクト節を格納した述語セル107
のアドレスを格納する。ボディ部次節ポインタ115は
、ボディ部を構成する次の節を格納したボディ部述語セ
ル112のアドレスを格納する。
【0042】次に、質問ゴール節処理方法について説明
することとし、プログラム節の格納処理方法については
後述する。
することとし、プログラム節の格納処理方法については
後述する。
【0043】図2は質問ゴール節処理で使用するスタッ
クのデータ構造を表す図である。スタック201は、ゴ
ール節フィールド203、代入フィールド204および
述語セルポインタ205からなるスタックセル202を
格納するエリアである。以下では、各スタックセルを先
頭から順に第0スタックセル、第1スタックセル、第2
スタックセル、...、第nスタックセルと呼ぶ。20
6はスタックの現在位置をさすスタックポインタである
。以下では、スタックポインタ206が指しているスタ
ックセル202を現スタックセルと呼ぶ。ゴール節フィ
ールド203には質問処理の対象となっているゴール節
を格納する。代入フィールドには、ゴール節フィールド
内の先頭の節(選択節)と格納されているプログラム節
から選択された入力節とをユニファイするための代入を
格納する。述語セルポインタ205には入力節のヘッド
部を格納した述語セル107のアドレスを格納する。
クのデータ構造を表す図である。スタック201は、ゴ
ール節フィールド203、代入フィールド204および
述語セルポインタ205からなるスタックセル202を
格納するエリアである。以下では、各スタックセルを先
頭から順に第0スタックセル、第1スタックセル、第2
スタックセル、...、第nスタックセルと呼ぶ。20
6はスタックの現在位置をさすスタックポインタである
。以下では、スタックポインタ206が指しているスタ
ックセル202を現スタックセルと呼ぶ。ゴール節フィ
ールド203には質問処理の対象となっているゴール節
を格納する。代入フィールドには、ゴール節フィールド
内の先頭の節(選択節)と格納されているプログラム節
から選択された入力節とをユニファイするための代入を
格納する。述語セルポインタ205には入力節のヘッド
部を格納した述語セル107のアドレスを格納する。
【0044】図3のフローチャートにより、質問ゴール
節処理を詳細に説明する。
節処理を詳細に説明する。
【0045】まず、ステップ301でスタックを初期化
する。すなわち、スタックポインタ206にスタックの
底となる第0スタックセルのアドレスを格納する。
する。すなわち、スタックポインタ206にスタックの
底となる第0スタックセルのアドレスを格納する。
【0046】次に、ステップ302では、質問ゴール節
を入力し、スタックポインタ206を一つ進め、現スタ
ックセル202のゴール節フィールド203に入力され
た質問ゴールを格納する。このとき、代入フィールド2
04を空とし、述語セルポインタ205をNULLとす
る。次にステップ303に進む。 ステップ303で
は、現スタックセルのゴール節フィールドに格納されて
いるゴール節の先頭の節を選択式とする。次にステップ
304に進む。
を入力し、スタックポインタ206を一つ進め、現スタ
ックセル202のゴール節フィールド203に入力され
た質問ゴールを格納する。このとき、代入フィールド2
04を空とし、述語セルポインタ205をNULLとす
る。次にステップ303に進む。 ステップ303で
は、現スタックセルのゴール節フィールドに格納されて
いるゴール節の先頭の節を選択式とする。次にステップ
304に進む。
【0047】ステップ304の入力節選択処理では、選
択式と同一の述語を持つ入力節を選択し、選択された入
力節のヘッド部を格納した述語セル107のアドレスを
スタックセルの述語セルポインタ205に格納する。入
力節選択処理は、本発明が従来技術と異なる点であり、
後でさらに詳細に述べる。次にステップ305に進む。
択式と同一の述語を持つ入力節を選択し、選択された入
力節のヘッド部を格納した述語セル107のアドレスを
スタックセルの述語セルポインタ205に格納する。入
力節選択処理は、本発明が従来技術と異なる点であり、
後でさらに詳細に述べる。次にステップ305に進む。
【0048】ステップ305では、ステップ304の入
力節選択処理で空でない入力節が得られたかどうかを判
定する。入力節が空、すなわち、現スタックセルの述語
セルポインタ205がNULLならばステップ306に
進み、NULLでなければステップ307に進む。
力節選択処理で空でない入力節が得られたかどうかを判
定する。入力節が空、すなわち、現スタックセルの述語
セルポインタ205がNULLならばステップ306に
進み、NULLでなければステップ307に進む。
【0049】ステップ307では、選択節と入力節との
単一化を行い、単一化するための代入を求める。単一化
が可能でなければステップ304に進む。また、単一化
が可能であれば、単一化するための代入を現スタックセ
ルの代入フィールド204に格納し、ステップ308に
進む。
単一化を行い、単一化するための代入を求める。単一化
が可能でなければステップ304に進む。また、単一化
が可能であれば、単一化するための代入を現スタックセ
ルの代入フィールド204に格納し、ステップ308に
進む。
【0050】ステップ308では、ゴール節フィールド
203に格納されているゴール節に対して入力節を適用
し新たなゴール節を導出する。すなわち、入力節がファ
クト節ならば、現スタックセルのゴール節フィールドに
格納されたゴール節に対して、選択節を取り除き、代入
フィールドに格納されている代入を施したものを、スタ
ックにプッシュする。また、入力節がルール節あるいは
連体修飾節ならば、現スタックセルのゴール節フィール
ドに格納されたゴール節に対して、選択節を入力節のボ
ディ部で置き換え、代入フィールドに格納されている代
入を施したものを、スタックにプッシュする。このとき
、代入フィールド204を空とし、述語セルポインタ2
05をNULLとする。次に、ステップ309に進む。
203に格納されているゴール節に対して入力節を適用
し新たなゴール節を導出する。すなわち、入力節がファ
クト節ならば、現スタックセルのゴール節フィールドに
格納されたゴール節に対して、選択節を取り除き、代入
フィールドに格納されている代入を施したものを、スタ
ックにプッシュする。また、入力節がルール節あるいは
連体修飾節ならば、現スタックセルのゴール節フィール
ドに格納されたゴール節に対して、選択節を入力節のボ
ディ部で置き換え、代入フィールドに格納されている代
入を施したものを、スタックにプッシュする。このとき
、代入フィールド204を空とし、述語セルポインタ2
05をNULLとする。次に、ステップ309に進む。
【0051】ステップ309では、現スタックセルのゴ
ール節フィールドを参照し、もし空ならばステップ31
0に進み、空でなければステップ303に進む。
ール節フィールドを参照し、もし空ならばステップ31
0に進み、空でなければステップ303に進む。
【0052】ステップ310では、スタックの底から現
スタックセルまでの間にあるスタックセルの代入フィー
ルドに格納されている代入を組み合わせて表示装置に出
力する。次に、ステップ306に進む。
スタックセルまでの間にあるスタックセルの代入フィー
ルドに格納されている代入を組み合わせて表示装置に出
力する。次に、ステップ306に進む。
【0053】また、ステップ306では、現スタックセ
ルを解放する。すなわち、スタックポインタを底の方向
に一つ戻す。次に、ステップ311に進む。
ルを解放する。すなわち、スタックポインタを底の方向
に一つ戻す。次に、ステップ311に進む。
【0054】ステップ311ではスタックが空であるか
どうかを判定する。もし、スタックポインタがスタック
の底(第0スタックセル)を指していればスタックは空
であり、質問ゴール節処理は終了する。スタックポイン
タがスタックの底を指していなければステップ303に
戻る。
どうかを判定する。もし、スタックポインタがスタック
の底(第0スタックセル)を指していればスタックは空
であり、質問ゴール節処理は終了する。スタックポイン
タがスタックの底を指していなければステップ303に
戻る。
【0055】次に、図4のフローチャートにより、質問
ゴール節処理における入力節選択処理(ステップ304
)の詳細を説明する。まず、ステップ401では現スタ
ックセルの述語セルポインタがNULLであるかどうか
を判定する。もしNULLであればステップ402に進
み、NULLでなければステップ403に進む。
ゴール節処理における入力節選択処理(ステップ304
)の詳細を説明する。まず、ステップ401では現スタ
ックセルの述語セルポインタがNULLであるかどうか
を判定する。もしNULLであればステップ402に進
み、NULLでなければステップ403に進む。
【0056】ステップ402に進むのはその述語の最初
の呼出しである場合である。ステップ402では、イン
デクスセル格納エリアを参照して選択式の述語名につい
てのインデクスセルを見つけ、そのインデクスセルの述
語セルポインタをスタックの述語セルポインタにコピー
する。次にステップ405に進む。
の呼出しである場合である。ステップ402では、イン
デクスセル格納エリアを参照して選択式の述語名につい
てのインデクスセルを見つけ、そのインデクスセルの述
語セルポインタをスタックの述語セルポインタにコピー
する。次にステップ405に進む。
【0057】また、ステップ403では、現スタックセ
ルの述語セルポインタの指す述語セルのマスク述語セル
ポインタがNULLでない場合、マスク述語セルポイン
タが指す述語セルのマスクフラグを解除、すなわち0に
する。またこのとき、そのスタックセルのボディ部ポイ
ンタがNULLでなければ、ボディ部述語セルをたどり
各ボディ部述語セルのマスク述語セルポインタが指す述
語セルのマスクフラグをすべて解除する。次のステップ
404では、現スタックセルの述語セルポインタを1つ
進める。次にステップ405に進む。
ルの述語セルポインタの指す述語セルのマスク述語セル
ポインタがNULLでない場合、マスク述語セルポイン
タが指す述語セルのマスクフラグを解除、すなわち0に
する。またこのとき、そのスタックセルのボディ部ポイ
ンタがNULLでなければ、ボディ部述語セルをたどり
各ボディ部述語セルのマスク述語セルポインタが指す述
語セルのマスクフラグをすべて解除する。次のステップ
404では、現スタックセルの述語セルポインタを1つ
進める。次にステップ405に進む。
【0058】ステップ405では、現スタックセルの述
語セルポインタが指す述語セルに選択式と同一の述語を
持つプログラム節があるかどうかを判定する。もし、そ
のようなプログラム節があればステップ407に進み、
無ければステップ406に進む。
語セルポインタが指す述語セルに選択式と同一の述語を
持つプログラム節があるかどうかを判定する。もし、そ
のようなプログラム節があればステップ407に進み、
無ければステップ406に進む。
【0059】ステップ406では、現スタックセルの述
語セルポインタをNULLにし入力節選択処理を終了す
る。これは入力節が空であることを表す。
語セルポインタをNULLにし入力節選択処理を終了す
る。これは入力節が空であることを表す。
【0060】また、ステップ407では、現スタックセ
ルの述語セルポインタが指す述語セルのマスクフラグが
設定されているかどうかを判定する。マスクフラグが設
定されている、すなわち1であればステップ401に進
む。またマスクフラグが設定されていない、すなわち0
であれば、ステップ408に進む。この場合、現スタッ
クセルの述語セルポインタが指す述語セルに格納されて
いるプログラム節が入力節として選択されたことになる
。
ルの述語セルポインタが指す述語セルのマスクフラグが
設定されているかどうかを判定する。マスクフラグが設
定されている、すなわち1であればステップ401に進
む。またマスクフラグが設定されていない、すなわち0
であれば、ステップ408に進む。この場合、現スタッ
クセルの述語セルポインタが指す述語セルに格納されて
いるプログラム節が入力節として選択されたことになる
。
【0061】ステップ408では、現スタックセルの述
語セルポインタが指す述語セルのマスク述語セルポイン
タがNULLであるかどうかを判定する。もしNULL
であれば入力節選択処理は終了する。また、NULLで
なければマスクフラグを設定するためステップ409に
進む。
語セルポインタが指す述語セルのマスク述語セルポイン
タがNULLであるかどうかを判定する。もしNULL
であれば入力節選択処理は終了する。また、NULLで
なければマスクフラグを設定するためステップ409に
進む。
【0062】ステップ409では現スタックセルの述語
セルポインタが指す述語セルのマスク述語セルポインタ
が指す述語セルのマスクフラグを1に設定する。次のス
テップ410では、当該述語セルのボディ部ポインタか
らボディ部述語セルのアドレスを得る。次にステップ4
11に進む。
セルポインタが指す述語セルのマスク述語セルポインタ
が指す述語セルのマスクフラグを1に設定する。次のス
テップ410では、当該述語セルのボディ部ポインタか
らボディ部述語セルのアドレスを得る。次にステップ4
11に進む。
【0063】ステップ411では、前ステップで得られ
たボディ部述語セルのマスク述語セルポインタが指す述
語セルのマスクフラグを1に設定する。次のステップ4
12では、当該述語セルのボディ部次節ポインタがNU
LLであるかどうかを判定し、NULLであれば、入力
節選択処理を終了する。また、NULLでなければ、ス
テップ413に進み、当該述語セルのボディ部次節ポイ
ンタから次のボディ部述語セルのアドレスを得てステッ
プ411に戻る。
たボディ部述語セルのマスク述語セルポインタが指す述
語セルのマスクフラグを1に設定する。次のステップ4
12では、当該述語セルのボディ部次節ポインタがNU
LLであるかどうかを判定し、NULLであれば、入力
節選択処理を終了する。また、NULLでなければ、ス
テップ413に進み、当該述語セルのボディ部次節ポイ
ンタから次のボディ部述語セルのアドレスを得てステッ
プ411に戻る。
【0064】以上述べた手順により入力節選択処理を実
現する。
現する。
【0065】次に、「←製造した(a社,Y)」という
質問ゴール節を例として、質問ゴール処理の具体例を示
す。
質問ゴール節を例として、質問ゴール処理の具体例を示
す。
【0066】図1には、「製造した(a社,ワープロ1
)」、「購入した(t大学,WS2050)」、および
、「より高い(WS2050,100万円)」というフ
ァクト節と、「製造した(a社,コンピュータ:X)←
^購入した(t大学,コンピュータ:X),より高い(
コンピュータ:X,100万円)」という連体修飾節が
格納された状態が示されている。
)」、「購入した(t大学,WS2050)」、および
、「より高い(WS2050,100万円)」というフ
ァクト節と、「製造した(a社,コンピュータ:X)←
^購入した(t大学,コンピュータ:X),より高い(
コンピュータ:X,100万円)」という連体修飾節が
格納された状態が示されている。
【0067】まず図3のステップ301でスタックを初
期化する。次に、ステップ302で質問ゴール節「←製
造した(a社,Y)」を第1スタックセルのゴール節フ
ィールドに格納する。次にステップ303で、ゴール節
から選択式を選択する。この例では「製造した(a社,
Y)」が選択式となる。次に、ステップ304で入力節
選択処理を行う。すなわち図4のステップ401に進む
。
期化する。次に、ステップ302で質問ゴール節「←製
造した(a社,Y)」を第1スタックセルのゴール節フ
ィールドに格納する。次にステップ303で、ゴール節
から選択式を選択する。この例では「製造した(a社,
Y)」が選択式となる。次に、ステップ304で入力節
選択処理を行う。すなわち図4のステップ401に進む
。
【0068】図4のステップ401では、第1スタック
の述語セルポインタがNULLであるのでステップ40
2に進み、インデクスセル格納エリアを参照し、「製造
した」という述語についての述語セルポインタとして1
201番地を得て第1スタックセルの述語セルポインタ
に格納する。次のステップ405では、1201番地に
「製造した」という述語を持つプログラム節があるので
、ステップ407に進む。このとき1201番地の述語
セルではマスクフラグが設定されていないのでステップ
408に進む。この時点で「製造した(a社,ワープロ
1)」というファクト節が入力節として選択されたこと
になる。ステップ408では、マスク述語セルポインタ
がNULLであるので入力節選択処理を終了し図3のス
テップ305に戻る。
の述語セルポインタがNULLであるのでステップ40
2に進み、インデクスセル格納エリアを参照し、「製造
した」という述語についての述語セルポインタとして1
201番地を得て第1スタックセルの述語セルポインタ
に格納する。次のステップ405では、1201番地に
「製造した」という述語を持つプログラム節があるので
、ステップ407に進む。このとき1201番地の述語
セルではマスクフラグが設定されていないのでステップ
408に進む。この時点で「製造した(a社,ワープロ
1)」というファクト節が入力節として選択されたこと
になる。ステップ408では、マスク述語セルポインタ
がNULLであるので入力節選択処理を終了し図3のス
テップ305に戻る。
【0069】次にステップ305では、第1スタックセ
ルの述語セルポインタを参照し、NULLでない(12
01番地)のでステップ307に進む。ここで、選択式
「製造した(a社,Y)」と入力節「製造した(a社,
ワープロ1)」との単一化を行う。これらは、代入「{
Y/ワープロ1}」により単一化が可能であるので、こ
の代入を第1スタックセルの代入フィールドに格納しス
テップ308に進む。ステップ308では、入力節がフ
ァクト節であるので、第1スタックセルのゴール節フィ
ールドから選択式を取り除き、代入フィールドの代入を
施したものを第2スタックセルのゴール節フィールドに
格納するが、この場合空節が格納されることになる。次
のステップ309ではゴール節が空節であるのでステッ
プ310に進む。この時のスタックの状態は、図5の通
りである。ステップ310では、スタックに格納された
代入を参照し、質問ゴール節の中の変数Yに対して「ワ
ープロ1」を解として出力しステップ306に進む。ス
テップ306ではスタックポインタを一つ戻す。 この場合スタックポインタは第1スタックセルを指すこ
とになる。次のステップ311ではスタックが空でない
のでステップ303に戻る。
ルの述語セルポインタを参照し、NULLでない(12
01番地)のでステップ307に進む。ここで、選択式
「製造した(a社,Y)」と入力節「製造した(a社,
ワープロ1)」との単一化を行う。これらは、代入「{
Y/ワープロ1}」により単一化が可能であるので、こ
の代入を第1スタックセルの代入フィールドに格納しス
テップ308に進む。ステップ308では、入力節がフ
ァクト節であるので、第1スタックセルのゴール節フィ
ールドから選択式を取り除き、代入フィールドの代入を
施したものを第2スタックセルのゴール節フィールドに
格納するが、この場合空節が格納されることになる。次
のステップ309ではゴール節が空節であるのでステッ
プ310に進む。この時のスタックの状態は、図5の通
りである。ステップ310では、スタックに格納された
代入を参照し、質問ゴール節の中の変数Yに対して「ワ
ープロ1」を解として出力しステップ306に進む。ス
テップ306ではスタックポインタを一つ戻す。 この場合スタックポインタは第1スタックセルを指すこ
とになる。次のステップ311ではスタックが空でない
のでステップ303に戻る。
【0070】ステップ303では、第1スタックセルの
ゴール節フィールドを参照し、「製造した(a社,Y)
」が再び選択式として選択される。次のステップ304
では図4の入力節選択処理を行う。すなわち、ステップ
401で第1スタックセルの述語セルポインタを参照し
、NULLでない(1201番地)のでステップ403
に進む。1201番地の述語セルのマスク述語セルポイ
ンタはNULLであるのでマスクフラグを解除すべき述
語セルが無いためそのままステップ404に進む。 ステップ404では、第1スタックセルの述語セルポイ
ンタを1つ進め1202番地とする。次のステップ40
5では1202番地に「製造した」という述語を持つプ
ログラム節があるのでステップ407に進む。1202
番地の述語セルにはマスクフラグが設定されていないの
でステップ408に進む。この時点で「製造した(a社
,コンピュータ:X)←^購入した(t大学,コンピュ
ータ:X),より高い(コンピュータ:X,100万円
)」という連体修飾節が入力節として選択されたことに
なる。次のステップ408では、1202番地の述語セ
ルのマスク述語セルポインタが1203番地を指してお
りNULLでないのでステップ409に進む。ステップ
409では、1203番地の述語セルのマスクフラグを
設定する。次のステップ410では1202番地の述語
セルのボディ部ポインタを参照し1301番地を得る。 次のステップ411では、1301番地のマスク述語セ
ルポインタによって指される1211番地の述語セルの
マスクフラグを設定する。次のステップ412では13
01番地のボディ部次節ポインタが1302番地であり
NULLでないのでステップ413に進む。次に、13
02番地のボディ部述語セルにたいしステップ411の
処理を行う。すなわち、1302番地のボディ部述語セ
ルのマスク述語セルポインタが指すところの、1221
番地の述語セルのマスクフラグを設定する。次のステッ
プ412では、1302番地のボディ部述語セルのボデ
ィ部次節ポインタがNULLであるため、入力節選択処
理を終了し、図3のステップ305に進む。
ゴール節フィールドを参照し、「製造した(a社,Y)
」が再び選択式として選択される。次のステップ304
では図4の入力節選択処理を行う。すなわち、ステップ
401で第1スタックセルの述語セルポインタを参照し
、NULLでない(1201番地)のでステップ403
に進む。1201番地の述語セルのマスク述語セルポイ
ンタはNULLであるのでマスクフラグを解除すべき述
語セルが無いためそのままステップ404に進む。 ステップ404では、第1スタックセルの述語セルポイ
ンタを1つ進め1202番地とする。次のステップ40
5では1202番地に「製造した」という述語を持つプ
ログラム節があるのでステップ407に進む。1202
番地の述語セルにはマスクフラグが設定されていないの
でステップ408に進む。この時点で「製造した(a社
,コンピュータ:X)←^購入した(t大学,コンピュ
ータ:X),より高い(コンピュータ:X,100万円
)」という連体修飾節が入力節として選択されたことに
なる。次のステップ408では、1202番地の述語セ
ルのマスク述語セルポインタが1203番地を指してお
りNULLでないのでステップ409に進む。ステップ
409では、1203番地の述語セルのマスクフラグを
設定する。次のステップ410では1202番地の述語
セルのボディ部ポインタを参照し1301番地を得る。 次のステップ411では、1301番地のマスク述語セ
ルポインタによって指される1211番地の述語セルの
マスクフラグを設定する。次のステップ412では13
01番地のボディ部次節ポインタが1302番地であり
NULLでないのでステップ413に進む。次に、13
02番地のボディ部述語セルにたいしステップ411の
処理を行う。すなわち、1302番地のボディ部述語セ
ルのマスク述語セルポインタが指すところの、1221
番地の述語セルのマスクフラグを設定する。次のステッ
プ412では、1302番地のボディ部述語セルのボデ
ィ部次節ポインタがNULLであるため、入力節選択処
理を終了し、図3のステップ305に進む。
【0071】ステップ305では第1スタックセルの述
語セルポインタを参照し、NULLでない(1202番
地)のでステップ307に進む。ここで、選択式「製造
した(a社,Y)」と入力節のヘッド部「製造した(a
社,コンピュータ:X)」との単一化を行う。これらは
、代入「{Y/コンピュータ:X}」により単一化が可
能であるので、この代入を第1スタックセルの代入フィ
ールドに格納しステップ308に進む。
語セルポインタを参照し、NULLでない(1202番
地)のでステップ307に進む。ここで、選択式「製造
した(a社,Y)」と入力節のヘッド部「製造した(a
社,コンピュータ:X)」との単一化を行う。これらは
、代入「{Y/コンピュータ:X}」により単一化が可
能であるので、この代入を第1スタックセルの代入フィ
ールドに格納しステップ308に進む。
【0072】ステップ308では、入力節が連体修飾節
であるので、第1スタックセルのゴール節フィールドに
格納されたゴール節に対して、選択式を連体修飾節のボ
ディ部で置き換え、代入フィールドの代入を施したもの
を第2スタックセルのゴール節フィールドに格納するが
、この場合「←購入した(t大学,コンピュータ:X)
,より高い(コンピュータ:X,100万円)」という
ゴール節が格納されることになる。次のステップ309
では、第2スタックセルのゴール節フィールドが空節で
ないのでステップ303に進む。
であるので、第1スタックセルのゴール節フィールドに
格納されたゴール節に対して、選択式を連体修飾節のボ
ディ部で置き換え、代入フィールドの代入を施したもの
を第2スタックセルのゴール節フィールドに格納するが
、この場合「←購入した(t大学,コンピュータ:X)
,より高い(コンピュータ:X,100万円)」という
ゴール節が格納されることになる。次のステップ309
では、第2スタックセルのゴール節フィールドが空節で
ないのでステップ303に進む。
【0073】ステップ303では、第2スタックセルの
ゴール節フィールドに格納されたゴール節「←購入した
(t大学,コンピュータ:X),より高い(コンピュー
タ:X,100万円)」から先頭の「購入した(t大学
,コンピュータ:X)」が選択式として選択される。 次に、ステップ304で入力節選択処理を行う。すなわ
ち図4のステップ401に進む。
ゴール節フィールドに格納されたゴール節「←購入した
(t大学,コンピュータ:X),より高い(コンピュー
タ:X,100万円)」から先頭の「購入した(t大学
,コンピュータ:X)」が選択式として選択される。 次に、ステップ304で入力節選択処理を行う。すなわ
ち図4のステップ401に進む。
【0074】図4のステップ401では、第2スタック
の述語セルポインタがNULLであるのでステップ40
2に進み、インデクスセル格納エリアを参照し、「購入
した」という述語についての述語セルポインタとして1
211番地を得て第2スタックセルの述語セルポインタ
に格納する。次のステップ405では、1211番地に
「購入した」という述語を持つプログラム節があるので
、ステップ407に進む。このとき1211番地の述語
セルではマスクフラグが設定されているのでステップ4
01に進む。
の述語セルポインタがNULLであるのでステップ40
2に進み、インデクスセル格納エリアを参照し、「購入
した」という述語についての述語セルポインタとして1
211番地を得て第2スタックセルの述語セルポインタ
に格納する。次のステップ405では、1211番地に
「購入した」という述語を持つプログラム節があるので
、ステップ407に進む。このとき1211番地の述語
セルではマスクフラグが設定されているのでステップ4
01に進む。
【0075】ステップ401では、第2スタックセルの
述語セルポインタを参照し、NULLでない(1211
番地)のでステップ403に進む。1211番地の述語
セルのマスク述語セルポインタはNULLであるのでマ
スクフラグを解除すべき述語セルが無いためそのままス
テップ404に進む。ステップ404では、第2スタッ
クセルの述語セルポインタを1つ進め1212番地とす
る。次のステップ405では1212番地に「購入した
」という述語を持つプログラム節があるのでステップ4
07に進む。1212番地の述語セルにはマスクフラグ
が設定されていないのでステップ408に進む。この時
点で「購入した(t大学,WS2050)」というファ
クト節が入力節として選択されたことになる。ステップ
408では1212番地の述語セルのマスク述語セルポ
インタがNULLであるので入力節選択処理を終了し、
図3のステップ305に戻る。
述語セルポインタを参照し、NULLでない(1211
番地)のでステップ403に進む。1211番地の述語
セルのマスク述語セルポインタはNULLであるのでマ
スクフラグを解除すべき述語セルが無いためそのままス
テップ404に進む。ステップ404では、第2スタッ
クセルの述語セルポインタを1つ進め1212番地とす
る。次のステップ405では1212番地に「購入した
」という述語を持つプログラム節があるのでステップ4
07に進む。1212番地の述語セルにはマスクフラグ
が設定されていないのでステップ408に進む。この時
点で「購入した(t大学,WS2050)」というファ
クト節が入力節として選択されたことになる。ステップ
408では1212番地の述語セルのマスク述語セルポ
インタがNULLであるので入力節選択処理を終了し、
図3のステップ305に戻る。
【0076】次にステップ305では、第2スタックセ
ルの述語セルポインタを参照し、NULLでない(12
12番地)のでステップ307に進む。ここで、選択式
「購入した(t大学,コンピュータ:X)」と入力節「
購入した(t大学,WS2050)」との単一化を行う
。これらは、代入「{X/WS2050}」により単一
化が可能であるので、この代入を第2スタックセルの代
入フィールドに格納しステップ308に進む。ステップ
308では、入力節がファクト節であるので、第2スタ
ックセルのゴール節フィールドに格納されたゴール節に
対して、選択式を取り除き、代入フィールドの代入を施
したものを第3スタックセルのゴール節フィールドに格
納するが、この場合,ゴール節「←より高い(WS20
50,100万円)」が格納されることになる。次のス
テップ309ではゴール節が空節でないのでステップ3
03に進む。
ルの述語セルポインタを参照し、NULLでない(12
12番地)のでステップ307に進む。ここで、選択式
「購入した(t大学,コンピュータ:X)」と入力節「
購入した(t大学,WS2050)」との単一化を行う
。これらは、代入「{X/WS2050}」により単一
化が可能であるので、この代入を第2スタックセルの代
入フィールドに格納しステップ308に進む。ステップ
308では、入力節がファクト節であるので、第2スタ
ックセルのゴール節フィールドに格納されたゴール節に
対して、選択式を取り除き、代入フィールドの代入を施
したものを第3スタックセルのゴール節フィールドに格
納するが、この場合,ゴール節「←より高い(WS20
50,100万円)」が格納されることになる。次のス
テップ309ではゴール節が空節でないのでステップ3
03に進む。
【0077】ステップ303では、第3スタックセルの
ゴール節フィールドに格納されたゴール節から「より高
い(WS2050,100万円)」が選択式として選択
される。次に、ステップ304で入力節選択処理を行う
。すなわち図4のステップ401に進む。
ゴール節フィールドに格納されたゴール節から「より高
い(WS2050,100万円)」が選択式として選択
される。次に、ステップ304で入力節選択処理を行う
。すなわち図4のステップ401に進む。
【0078】図4のステップ401では、第3スタック
の述語セルポインタがNULLであるのでステップ40
2に進み、インデクスセル格納エリアを参照し、「より
高い」という述語についての述語セルポインタとして1
221番地を得て第3スタックセルの述語セルポインタ
に格納する。次のステップ405では、1221番地に
「より高い」という述語を持つプログラム節があるので
、ステップ407に進む。このとき1221番地の述語
セルではマスクフラグが設定されているのでステップ4
01に進む。
の述語セルポインタがNULLであるのでステップ40
2に進み、インデクスセル格納エリアを参照し、「より
高い」という述語についての述語セルポインタとして1
221番地を得て第3スタックセルの述語セルポインタ
に格納する。次のステップ405では、1221番地に
「より高い」という述語を持つプログラム節があるので
、ステップ407に進む。このとき1221番地の述語
セルではマスクフラグが設定されているのでステップ4
01に進む。
【0079】ステップ401では、第3スタックセルの
述語セルポインタを参照し、NULLでない(1221
番地)のでステップ403に進む。1221番地の述語
セルのマスク述語セルポインタはNULLであるのでマ
スクフラグを解除すべき述語セルが無いためそのままス
テップ404に進む。ステップ404では、第3スタッ
クセルの述語セルポインタを1つ進め1222番地とす
る。次のステップ405では1222番地に「より高い
」という述語を持つプログラム節があるのでステップ4
07に進む。1222番地の述語セルにはマスクフラグ
が設定されていないのでステップ408に進む。この時
点で「より高い(WS2050,100万円)」という
ファクト節が入力節として選択されたことになる。ステ
ップ408では1222番地の述語セルのマスク述語セ
ルポインタがNULLであるので入力節選択処理を終了
し、図3のステップ305に戻る。
述語セルポインタを参照し、NULLでない(1221
番地)のでステップ403に進む。1221番地の述語
セルのマスク述語セルポインタはNULLであるのでマ
スクフラグを解除すべき述語セルが無いためそのままス
テップ404に進む。ステップ404では、第3スタッ
クセルの述語セルポインタを1つ進め1222番地とす
る。次のステップ405では1222番地に「より高い
」という述語を持つプログラム節があるのでステップ4
07に進む。1222番地の述語セルにはマスクフラグ
が設定されていないのでステップ408に進む。この時
点で「より高い(WS2050,100万円)」という
ファクト節が入力節として選択されたことになる。ステ
ップ408では1222番地の述語セルのマスク述語セ
ルポインタがNULLであるので入力節選択処理を終了
し、図3のステップ305に戻る。
【0080】次にステップ305では、第3スタックセ
ルの述語セルポインタを参照し、NULLでない(12
22番地)のでステップ307に進む。ここで、選択式
「より高い(WS2050,100万円)」と入力節と
の単一化を行う。これらは、同一であり恒等代入により
単一化が可能である。第3スタックセルの代入フィール
ドを空にすることにより恒等代入を表す。次のステップ
308では、入力節がファクト節であるので、第3スタ
ックセルのゴール節フィールドから選択式を取り除き、
代入フィールドの代入を施したものを第4スタックセル
のゴール節フィールドに格納するが、この場合空節が格
納されることになる。次のステップ309ではゴール節
が空節であるのでステップ310に進む。この時のスタ
ックの状態は、図6の通りである。ステップ310では
、スタックに格納された代入を参照し、質問ゴール節の
中の変数Yに対して「WS2050」を解として出力し
ステップ306に進む。ステップ306ではスタックポ
インタを一つ戻す。この場合スタックポインタは第3ス
タックセルを指すことになる。次のステップ311では
スタックが空でないのでステップ303に戻る。
ルの述語セルポインタを参照し、NULLでない(12
22番地)のでステップ307に進む。ここで、選択式
「より高い(WS2050,100万円)」と入力節と
の単一化を行う。これらは、同一であり恒等代入により
単一化が可能である。第3スタックセルの代入フィール
ドを空にすることにより恒等代入を表す。次のステップ
308では、入力節がファクト節であるので、第3スタ
ックセルのゴール節フィールドから選択式を取り除き、
代入フィールドの代入を施したものを第4スタックセル
のゴール節フィールドに格納するが、この場合空節が格
納されることになる。次のステップ309ではゴール節
が空節であるのでステップ310に進む。この時のスタ
ックの状態は、図6の通りである。ステップ310では
、スタックに格納された代入を参照し、質問ゴール節の
中の変数Yに対して「WS2050」を解として出力し
ステップ306に進む。ステップ306ではスタックポ
インタを一つ戻す。この場合スタックポインタは第3ス
タックセルを指すことになる。次のステップ311では
スタックが空でないのでステップ303に戻る。
【0081】ステップ303では、「より高い(WS2
050,100万円)」が再び選択式として選択される
。次のステップ304では図4の入力節選択処理を行う
。すなわち、ステップ401で第3スタックセルの述語
セルポインタを参照し、NULLでない(1222番地
)のでステップ403に進む。1222番地の述語セル
のマスク述語セルポインタはNULLであるのでマスク
フラグを解除すべき述語セルが無いためそのままステッ
プ404に進む。ステップ404では、第3スタックセ
ルの述語セルポインタを1つ進め1223番地とする。 次のステップ405では1223番地に「より高い」と
いう述語を持つプログラム節が無いのでステップ406
に進む。ステップ406では、第3スタックセルの述語
セルポインタをNULLにする。入力節選択処理は失敗
終了し図4のステップ305に戻る。
050,100万円)」が再び選択式として選択される
。次のステップ304では図4の入力節選択処理を行う
。すなわち、ステップ401で第3スタックセルの述語
セルポインタを参照し、NULLでない(1222番地
)のでステップ403に進む。1222番地の述語セル
のマスク述語セルポインタはNULLであるのでマスク
フラグを解除すべき述語セルが無いためそのままステッ
プ404に進む。ステップ404では、第3スタックセ
ルの述語セルポインタを1つ進め1223番地とする。 次のステップ405では1223番地に「より高い」と
いう述語を持つプログラム節が無いのでステップ406
に進む。ステップ406では、第3スタックセルの述語
セルポインタをNULLにする。入力節選択処理は失敗
終了し図4のステップ305に戻る。
【0082】ステップ305では、第3スタックセルの
述語セルポインタがNULLであるため、ステップ30
6に進む。ステップ306ではスタックポインタを一つ
戻す。この場合スタックポインタは第2スタックセルを
指すことになる。次のステップ311ではスタックが空
でないのでステップ303に戻る。
述語セルポインタがNULLであるため、ステップ30
6に進む。ステップ306ではスタックポインタを一つ
戻す。この場合スタックポインタは第2スタックセルを
指すことになる。次のステップ311ではスタックが空
でないのでステップ303に戻る。
【0083】ステップ303では、第2スタックセルの
ゴール節フィールドに格納されたゴール節「←購入した
(t大学,コンピュータ:X),より高い(コンピュー
タ:X,100万円)」から先頭の「購入した(t大学
,コンピュータ:X)」が再び選択式として選択される
。次に、ステップ304で入力節選択処理を行う。すな
わち図4のステップ401に進む。ステップ401では
第2スタックセルの述語セルポインタを参照し、NUL
Lでない(1212番地)のでステップ403に進む。 1212番地の述語セルのマスク述語セルポインタはN
ULLであるのでマスクフラグを解除すべき述語セルが
無いためそのままステップ404に進む。ステップ40
4では、第2スタックセルの述語セルポインタを1つ進
め1213番地とする。次のステップ405では121
3番地に「購入した」という述語を持つプログラム節が
無いのでステップ406に進む。ステップ406では、
第2スタックセルの述語セルポインタをNULLにする
。入力節選択処理は失敗終了し図4のステップ305に
戻る。
ゴール節フィールドに格納されたゴール節「←購入した
(t大学,コンピュータ:X),より高い(コンピュー
タ:X,100万円)」から先頭の「購入した(t大学
,コンピュータ:X)」が再び選択式として選択される
。次に、ステップ304で入力節選択処理を行う。すな
わち図4のステップ401に進む。ステップ401では
第2スタックセルの述語セルポインタを参照し、NUL
Lでない(1212番地)のでステップ403に進む。 1212番地の述語セルのマスク述語セルポインタはN
ULLであるのでマスクフラグを解除すべき述語セルが
無いためそのままステップ404に進む。ステップ40
4では、第2スタックセルの述語セルポインタを1つ進
め1213番地とする。次のステップ405では121
3番地に「購入した」という述語を持つプログラム節が
無いのでステップ406に進む。ステップ406では、
第2スタックセルの述語セルポインタをNULLにする
。入力節選択処理は失敗終了し図4のステップ305に
戻る。
【0084】ステップ305では、第2スタックセルの
述語セルポインタがNULLであるため、ステップ30
6に進む。ステップ306ではスタックポインタを一つ
戻す。この場合スタックポインタは第1スタックセルを
指すことになる。次のステップ311ではスタックが空
でないのでステップ303に戻る。
述語セルポインタがNULLであるため、ステップ30
6に進む。ステップ306ではスタックポインタを一つ
戻す。この場合スタックポインタは第1スタックセルを
指すことになる。次のステップ311ではスタックが空
でないのでステップ303に戻る。
【0085】ステップ303では、「製造した(a社,
Y)」が再び選択式として選択される。次のステップ3
04では図4の入力節選択処理を行う。すなわち、ステ
ップ401で第1スタックセルの述語セルポインタを参
照し、NULLでない(1202番地)のでステップ4
03に進む。
Y)」が再び選択式として選択される。次のステップ3
04では図4の入力節選択処理を行う。すなわち、ステ
ップ401で第1スタックセルの述語セルポインタを参
照し、NULLでない(1202番地)のでステップ4
03に進む。
【0086】ステップ403では、1202番地の述語
セルのマスク述語セルポインタが指す述語セル(120
3番地)のマスクフラグを解除する。そして、ボディ部
ポインタによって指されている一連のボディ部述語セル
、すなわち1301番地と1302番地のボディ部述語
セルについて、各マスク述語セルポインタが指す述語セ
ル(1211番地および1221番地の述語セル)のマ
スクフラグを解除する。次のステップ404では、第1
スタックセルの述語セルポインタを1つ進め1203番
地とする。次のステップ405では1203番地に「製
造した」という述語を持つプログラム節があるのでステ
ップ407に進む。1203番地の述語セルにはマスク
フラグが設定されていないのでステップ408に進む。 この時点で「製造した(a社,コンピュータ#1)」と
いうファクト節が入力節として選択されたことになる。 ステップ408では、マスク述語セルポインタがNUL
Lであるので入力節選択処理を終了し図3のステップ3
05に戻る。
セルのマスク述語セルポインタが指す述語セル(120
3番地)のマスクフラグを解除する。そして、ボディ部
ポインタによって指されている一連のボディ部述語セル
、すなわち1301番地と1302番地のボディ部述語
セルについて、各マスク述語セルポインタが指す述語セ
ル(1211番地および1221番地の述語セル)のマ
スクフラグを解除する。次のステップ404では、第1
スタックセルの述語セルポインタを1つ進め1203番
地とする。次のステップ405では1203番地に「製
造した」という述語を持つプログラム節があるのでステ
ップ407に進む。1203番地の述語セルにはマスク
フラグが設定されていないのでステップ408に進む。 この時点で「製造した(a社,コンピュータ#1)」と
いうファクト節が入力節として選択されたことになる。 ステップ408では、マスク述語セルポインタがNUL
Lであるので入力節選択処理を終了し図3のステップ3
05に戻る。
【0087】次にステップ305では、第1スタックセ
ルの述語セルポインタを参照し、NULLでない(12
03番地)のでステップ307に進む。ここで、選択式
「製造した(a社,Y)」と入力節「製造した(a社,
コンピュータ#1)」との単一化を行う。これらは、代
入「{Y/コンピュータ#1}」により単一化が可能で
あるので、この代入を第1スタックセルの代入フィール
ドに格納しステップ308に進む。ステップ308では
、入力節がファクト節であるので、第1スタックセルの
ゴール節フィールドに格納されたゴール節に対して、選
択式を取り除き、代入フィールドの代入を施したものを
第2スタックセルのゴール節フィールドに格納するが、
この場合空節が格納されることになる。次のステップ3
09ではゴール節が空節であるのでステップ310に進
む。この時のスタックの状態は、図7の通りである。ス
テップ310では、スタックに格納された代入を参照し
、質問ゴール節の中の変数Yに対して「コンピュータ#
1」を解として出力しステップ306に進む。ステップ
306ではスタックポインタを一つ戻す。この場合スタ
ックポインタは第1スタックセルを指すことになる。次
のステップ311ではスタックが空でないのでステップ
303に戻る。
ルの述語セルポインタを参照し、NULLでない(12
03番地)のでステップ307に進む。ここで、選択式
「製造した(a社,Y)」と入力節「製造した(a社,
コンピュータ#1)」との単一化を行う。これらは、代
入「{Y/コンピュータ#1}」により単一化が可能で
あるので、この代入を第1スタックセルの代入フィール
ドに格納しステップ308に進む。ステップ308では
、入力節がファクト節であるので、第1スタックセルの
ゴール節フィールドに格納されたゴール節に対して、選
択式を取り除き、代入フィールドの代入を施したものを
第2スタックセルのゴール節フィールドに格納するが、
この場合空節が格納されることになる。次のステップ3
09ではゴール節が空節であるのでステップ310に進
む。この時のスタックの状態は、図7の通りである。ス
テップ310では、スタックに格納された代入を参照し
、質問ゴール節の中の変数Yに対して「コンピュータ#
1」を解として出力しステップ306に進む。ステップ
306ではスタックポインタを一つ戻す。この場合スタ
ックポインタは第1スタックセルを指すことになる。次
のステップ311ではスタックが空でないのでステップ
303に戻る。
【0088】ステップ303では、「製造した(a社,
Y)」が再び選択式として選択される。次のステップ3
04では図4の入力節選択処理を行う。すなわち、ステ
ップ401で第1スタックセルの述語セルポインタを参
照し、NULLでない(1203番地)のでステップ4
03に進む。1203番地の述語セルのマスク述語セル
ポインタはNULLであるのでマスクフラグを解除すべ
き述語セルが無いためそのままステップ404に進む。 ステップ404では、第3スタックセルの述語セルポイ
ンタを1つ進め1204番地とする。次のステップ40
5では1204番地に「製造した」という述語を持つプ
ログラム節が無いのでステップ406に進む。ステップ
406では、第1スタックセルの述語セルポインタをN
ULLにする。入力節選択処理は失敗終了し図4のステ
ップ305に戻る。
Y)」が再び選択式として選択される。次のステップ3
04では図4の入力節選択処理を行う。すなわち、ステ
ップ401で第1スタックセルの述語セルポインタを参
照し、NULLでない(1203番地)のでステップ4
03に進む。1203番地の述語セルのマスク述語セル
ポインタはNULLであるのでマスクフラグを解除すべ
き述語セルが無いためそのままステップ404に進む。 ステップ404では、第3スタックセルの述語セルポイ
ンタを1つ進め1204番地とする。次のステップ40
5では1204番地に「製造した」という述語を持つプ
ログラム節が無いのでステップ406に進む。ステップ
406では、第1スタックセルの述語セルポインタをN
ULLにする。入力節選択処理は失敗終了し図4のステ
ップ305に戻る。
【0089】ステップ305では、第1スタックセルの
述語セルポインタがNULLであるため、ステップ30
6に進む。ステップ306ではスタックポインタを一つ
戻す。この場合スタックポインタはスタックの底(第0
スタックセル)を指すことになる。次のステップ311
ではスタックが空である質問ゴール節処理を終了する。
述語セルポインタがNULLであるため、ステップ30
6に進む。ステップ306ではスタックポインタを一つ
戻す。この場合スタックポインタはスタックの底(第0
スタックセル)を指すことになる。次のステップ311
ではスタックが空である質問ゴール節処理を終了する。
【0090】以上の質問ゴール節処理の過程では、質問
ゴール節「←製造した(a社,Y)」に含まれる変数Y
に対して、3つの解、{ワープロ1、WS2050、コ
ンピュータ#1}を正しく求めることができた。また、
マスクフラグを参照した入力節選択処理により、121
1番地と1221番地の述語セルについてそれぞれ1度
ずつ合計2回の余分な単一化処理を削減することができ
た。削減された単一化処理によって得られるべき解は1
203番地の述語セルにファクトとして予め格納されて
おり、これを入力節とした1回の単一化処理によっても
とめることができる。すなわち、この具体例では1回の
単一化処理を節約できたことになる。
ゴール節「←製造した(a社,Y)」に含まれる変数Y
に対して、3つの解、{ワープロ1、WS2050、コ
ンピュータ#1}を正しく求めることができた。また、
マスクフラグを参照した入力節選択処理により、121
1番地と1221番地の述語セルについてそれぞれ1度
ずつ合計2回の余分な単一化処理を削減することができ
た。削減された単一化処理によって得られるべき解は1
203番地の述語セルにファクトとして予め格納されて
おり、これを入力節とした1回の単一化処理によっても
とめることができる。すなわち、この具体例では1回の
単一化処理を節約できたことになる。
【0091】一般には、連体修飾節に対して格納された
具象化ファクト節をn個とするとn−1個の単一化処理
を節約できるという効果がある。
具象化ファクト節をn個とするとn−1個の単一化処理
を節約できるという効果がある。
【0092】次に、プログラム節の格納処理方法につい
て説明する。
て説明する。
【0093】図8は、プログラム節入力時に使用する変
数名テーブルのデータ構造を表す図である。変数名テー
ブル801は、変数名フィールド802と変数識別番号
フィールド803の組を格納するエリアである。変数名
フィールド802には、変数名を表す文字列を格納する
。変数識別番号フィールド803には各変数に与える変
数識別番号を格納する。変数名カウンタ804には使用
した変数識別番号の最大値を格納する。変数名カウンタ
は、最初のプログラム節を入力する前に一度だけ0に設
定する。変数名テーブル801はプログラム節を一つ入
力する度に空にする。一つのプログラム節内で新しい変
数が現れると、まず変数名カウンタの値を1増やし、そ
の変数に、変数名カウンタの新しい値を変数識別番号と
して与え、変数名テーブルに登録する。これにより、入
力プログラム節に現れる個々の変数にユニークな変数識
別番号を割り当てることができる。
数名テーブルのデータ構造を表す図である。変数名テー
ブル801は、変数名フィールド802と変数識別番号
フィールド803の組を格納するエリアである。変数名
フィールド802には、変数名を表す文字列を格納する
。変数識別番号フィールド803には各変数に与える変
数識別番号を格納する。変数名カウンタ804には使用
した変数識別番号の最大値を格納する。変数名カウンタ
は、最初のプログラム節を入力する前に一度だけ0に設
定する。変数名テーブル801はプログラム節を一つ入
力する度に空にする。一つのプログラム節内で新しい変
数が現れると、まず変数名カウンタの値を1増やし、そ
の変数に、変数名カウンタの新しい値を変数識別番号と
して与え、変数名テーブルに登録する。これにより、入
力プログラム節に現れる個々の変数にユニークな変数識
別番号を割り当てることができる。
【0094】図9のフローチャートにより、入力プログ
ラム節の格納処理方法を説明する。
ラム節の格納処理方法を説明する。
【0095】ステップ901では、変数名カウンタ80
4を初期化する。すなわち、変数名カウンタの値を0に
する。次にステップ902に進む。
4を初期化する。すなわち、変数名カウンタの値を0に
する。次にステップ902に進む。
【0096】ステップ902では、変数名テーブルを初
期化する。すなわち、登録された変数が一つもない状態
にする。次にステップ903に進む。
期化する。すなわち、登録された変数が一つもない状態
にする。次にステップ903に進む。
【0097】ステップ903では、入力装置からプログ
ラム節を入力する。ステップ904に進む。ステップ9
04では、入力節が有ったかどうかを判定し、もし入力
節があればステップ905に進み、また入力節がなけれ
ばプログラム節格納処理を終了する。
ラム節を入力する。ステップ904に進む。ステップ9
04では、入力節が有ったかどうかを判定し、もし入力
節があればステップ905に進み、また入力節がなけれ
ばプログラム節格納処理を終了する。
【0098】ステップ905では、入力されたプログラ
ム節のヘッド部の述語と同一の述語をヘッド部に持つプ
ログラム節が既に格納されているかどうかをインデクス
セル格納エリア101を参照して判定する。もし、その
述語と述語名フィールドの内容が一致するインデクスセ
ルがあればステップ906に進み、そのようなインデク
スセルがなければステップ907に進む。
ム節のヘッド部の述語と同一の述語をヘッド部に持つプ
ログラム節が既に格納されているかどうかをインデクス
セル格納エリア101を参照して判定する。もし、その
述語と述語名フィールドの内容が一致するインデクスセ
ルがあればステップ906に進み、そのようなインデク
スセルがなければステップ907に進む。
【0099】ステップ907では、新しい述語名に対応
するインデクスセルの割り当てを行う。使用中のインデ
クスセルの最後尾に新しいインデクスセルを作成する。 述語名をその新しいインデクスセルの述語名フィールド
105に格納する。次にステップ908に進む。
するインデクスセルの割り当てを行う。使用中のインデ
クスセルの最後尾に新しいインデクスセルを作成する。 述語名をその新しいインデクスセルの述語名フィールド
105に格納する。次にステップ908に進む。
【0100】ステップ908では、入力されたプログラ
ム節のヘッド部を格納する述語セルを割り当てる。使用
中の述語セルの最後尾に新しい述語セルを作成する。ス
テップ909に進む。
ム節のヘッド部を格納する述語セルを割り当てる。使用
中の述語セルの最後尾に新しい述語セルを作成する。ス
テップ909に進む。
【0101】ステップ909では、ステップ907で割
り当てたインデクスセルの述語セルポインタ106に、
ステップ908で割り当てた述語セルのアドレスを格納
する。次にステップ910に進む。
り当てたインデクスセルの述語セルポインタ106に、
ステップ908で割り当てた述語セルのアドレスを格納
する。次にステップ910に進む。
【0102】また、ステップ906では、入力されたプ
ログラム節のヘッド部を格納する述語セルを割り当てる
。ステップ905で検出したインデクスセルの述語セル
ポインタが指す述語セルから、その述語を持つプログラ
ム節の最後尾を見つけ新しい述語セルを作成する。次に
ステップ910に進む。
ログラム節のヘッド部を格納する述語セルを割り当てる
。ステップ905で検出したインデクスセルの述語セル
ポインタが指す述語セルから、その述語を持つプログラ
ム節の最後尾を見つけ新しい述語セルを作成する。次に
ステップ910に進む。
【0103】ステップ910では、入力されたプログラ
ム節がルール節であるかを判定し、もしそうであればス
テップ912に進み、そうでなければ、ステップ911
に進む。
ム節がルール節であるかを判定し、もしそうであればス
テップ912に進み、そうでなければ、ステップ911
に進む。
【0104】ステップ912では、ステップ906ある
いはステップ908で割り当てられた述語セルのヘッド
部節フィールド109に入力されたルール節のヘッド部
を格納する。次にステップ913に進む。
いはステップ908で割り当てられた述語セルのヘッド
部節フィールド109に入力されたルール節のヘッド部
を格納する。次にステップ913に進む。
【0105】ステップ913では、入力されたルール節
のボディ部の節を格納するボディ部述語セルを割り当て
る。ボディ部の節の数だけ新たなボディ部述語セルを作
成し、それらをボディ部次節ポインタで連結しリストと
する。そのリストの先頭セルのアドレスをステップ90
6あるいはステップ908で割り当てられた述語セルの
ボディ部ポインタに格納する。ステップ914に進む。
のボディ部の節を格納するボディ部述語セルを割り当て
る。ボディ部の節の数だけ新たなボディ部述語セルを作
成し、それらをボディ部次節ポインタで連結しリストと
する。そのリストの先頭セルのアドレスをステップ90
6あるいはステップ908で割り当てられた述語セルの
ボディ部ポインタに格納する。ステップ914に進む。
【0106】ステップ914では、ステップ913で割
り当てたボディ部述語セルのボディ部節フィールド11
3に、入力されたルール節のボディ部の各節を一つずつ
順に格納する。このとき、各ボディ部述語セルのマスク
述語セルポインタはNULLにする。次にステップ90
2に戻る。
り当てたボディ部述語セルのボディ部節フィールド11
3に、入力されたルール節のボディ部の各節を一つずつ
順に格納する。このとき、各ボディ部述語セルのマスク
述語セルポインタはNULLにする。次にステップ90
2に戻る。
【0107】また、ステップ911では、入力されたプ
ログラム節が連体修飾節であるかを判定し、もしそうで
なければステップ915に進み、そうであれば、ステッ
プ916に進む。
ログラム節が連体修飾節であるかを判定し、もしそうで
なければステップ915に進み、そうであれば、ステッ
プ916に進む。
【0108】ステップ915では、ステップ906ある
いはステップ908で割り当てられた述語セルのヘッド
部節フィールド109に入力されたファクト節を格納す
る。マスク述語セルポインタ110およびボディ部ポイ
ンタ111はNULLにする。次に、ステップ902に
戻る。
いはステップ908で割り当てられた述語セルのヘッド
部節フィールド109に入力されたファクト節を格納す
る。マスク述語セルポインタ110およびボディ部ポイ
ンタ111はNULLにする。次に、ステップ902に
戻る。
【0109】ステップ916では、入力された連体修飾
節の格納処理を行い、ステップ902に戻る。
節の格納処理を行い、ステップ902に戻る。
【0110】次に、この連体修飾節格納処理について図
10のフローチャートにより説明する。
10のフローチャートにより説明する。
【0111】まず始めにステップ1001で変数名テー
ブルの作成を行う。入力された連体修飾節を走査し、変
数の出現の度に変数名テーブルを参照する。そして、そ
の変数名が既に変数名テーブル中にない場合に限り、変
数名カウンタの値を1増やし、その変数に変数名カウン
タの新しい値を変数識別番号として与え、変数名テーブ
ルに登録する。入力された連体修飾節を走査が終るとス
テップ1002に進む。
ブルの作成を行う。入力された連体修飾節を走査し、変
数の出現の度に変数名テーブルを参照する。そして、そ
の変数名が既に変数名テーブル中にない場合に限り、変
数名カウンタの値を1増やし、その変数に変数名カウン
タの新しい値を変数識別番号として与え、変数名テーブ
ルに登録する。入力された連体修飾節を走査が終るとス
テップ1002に進む。
【0112】ステップ1002では、ステップ906あ
るいはステップ908で割り当てられた述語セルのヘッ
ド部節フィールド109に入力された連体修飾節のヘッ
ド部を格納する。次のステップ1003では、前記のス
テップ905からステップ909と同一の処理により、
述語セルの割り当てを行う。次のステップ1004では
ステップ1003で割り当てた述語セルに、入力された
連体修飾節のヘッド部の変数を定数化した具象化ファク
ト節を格納する。この具象化ファクト節格納処理につい
ては後述する。次にステップ1005に進む。
るいはステップ908で割り当てられた述語セルのヘッ
ド部節フィールド109に入力された連体修飾節のヘッ
ド部を格納する。次のステップ1003では、前記のス
テップ905からステップ909と同一の処理により、
述語セルの割り当てを行う。次のステップ1004では
ステップ1003で割り当てた述語セルに、入力された
連体修飾節のヘッド部の変数を定数化した具象化ファク
ト節を格納する。この具象化ファクト節格納処理につい
ては後述する。次にステップ1005に進む。
【0113】ステップ1005では、ボディ部述語セル
の割り当てを行う。使用中のボディ部述語セルの最後尾
に新たなをボディ部述語セル作成する。次のステップ1
006では、ステップ1005で割り当てたボディ部述
語セルのアドレスをステップ906あるいはステップ9
08で割り当てられた述語セルのボディ部ポインタ11
1に格納する。ステップ1007に進む。
の割り当てを行う。使用中のボディ部述語セルの最後尾
に新たなをボディ部述語セル作成する。次のステップ1
006では、ステップ1005で割り当てたボディ部述
語セルのアドレスをステップ906あるいはステップ9
08で割り当てられた述語セルのボディ部ポインタ11
1に格納する。ステップ1007に進む。
【0114】ステップ1007では、割り当てられたボ
ディ部述語セルのボディ部節フィールド113に、入力
された連体修飾節のボディ部の節を一つ格納する。次の
ステップ1008では、ステップ1007で格納された
ボディ部の節に対し、ステップ1003と同一の処理に
より述語セルを割り当てる。次のステップ1009では
、ステップ1008で割り当てた述語セルに、ステップ
1007で格納されたボディ部の節の変数を定数化した
具象化ファクト節を、後述の具象化ファクト節格納処理
により、格納する。ステップ1010に進む。
ディ部述語セルのボディ部節フィールド113に、入力
された連体修飾節のボディ部の節を一つ格納する。次の
ステップ1008では、ステップ1007で格納された
ボディ部の節に対し、ステップ1003と同一の処理に
より述語セルを割り当てる。次のステップ1009では
、ステップ1008で割り当てた述語セルに、ステップ
1007で格納されたボディ部の節の変数を定数化した
具象化ファクト節を、後述の具象化ファクト節格納処理
により、格納する。ステップ1010に進む。
【0115】ステップ1010では、入力された連体修
飾節についてまだ格納されていないボディ部の節が残っ
ているかどうかを判定し、もし、残っていなければ、連
体修飾節格納処理を終了しステップ902に戻る。また
、残っていれば、ステップ1011に進む。
飾節についてまだ格納されていないボディ部の節が残っ
ているかどうかを判定し、もし、残っていなければ、連
体修飾節格納処理を終了しステップ902に戻る。また
、残っていれば、ステップ1011に進む。
【0116】ステップ1011では、ステップ1005
と同一の処理によりボディ部述語セルの割り当てを行う
。つぎのステップ1012では、ステップ1011で割
り当てたボディ部述語セルのアドレスを、ステップ10
07で割り当てたボディ部述語セルのボディ部次節ポイ
ンタ115に格納する。次にステップ1007に進む。
と同一の処理によりボディ部述語セルの割り当てを行う
。つぎのステップ1012では、ステップ1011で割
り当てたボディ部述語セルのアドレスを、ステップ10
07で割り当てたボディ部述語セルのボディ部次節ポイ
ンタ115に格納する。次にステップ1007に進む。
【0117】ボディ部の最後の節の処理が終るとステッ
プ1010において連体修飾節格納処理を終了する。
プ1010において連体修飾節格納処理を終了する。
【0118】次に、図11のフローチャートにより、ス
テップ1004およびステップ1009の具象化ファク
ト節格納処理の詳細を説明する。
テップ1004およびステップ1009の具象化ファク
ト節格納処理の詳細を説明する。
【0119】まず、ステップ1101で、既に割り当て
られている述語セルのヘッド部節フィールド109に、
具象化して格納しようとしている節の述語部分を格納す
る。次に、ステップ1102に進む。
られている述語セルのヘッド部節フィールド109に、
具象化して格納しようとしている節の述語部分を格納す
る。次に、ステップ1102に進む。
【0120】ステップ1102では、引数項の1つにつ
いて、その引数項が「領域名:変数名」の形をしている
かどうかを判定する。もし、「領域名:変数名」の形で
あればステップ1104に進み、そうでなければステッ
プ1103に進む。
いて、その引数項が「領域名:変数名」の形をしている
かどうかを判定する。もし、「領域名:変数名」の形で
あればステップ1104に進み、そうでなければステッ
プ1103に進む。
【0121】ステップ1103では、ステップ1001
で述語部分を格納した述語セルのヘッド部節フィールド
109に、引数項を追加格納する。次に、ステップ11
06に進む。
で述語部分を格納した述語セルのヘッド部節フィールド
109に、引数項を追加格納する。次に、ステップ11
06に進む。
【0122】また、ステップ1104では、変数名テー
ブルを参照し、引数項の変数名に付与されている変数識
別番号を求める。次のステップ1105では、ステップ
1001で述語部分を格納した述語セルのヘッド部節フ
ィールド109に、引数項として「領域名#変数識別番
号」という形式の定数を追加格納する。次に、ステップ
1106に進む。
ブルを参照し、引数項の変数名に付与されている変数識
別番号を求める。次のステップ1105では、ステップ
1001で述語部分を格納した述語セルのヘッド部節フ
ィールド109に、引数項として「領域名#変数識別番
号」という形式の定数を追加格納する。次に、ステップ
1106に進む。
【0123】ステップ1106では、格納されていない
引数項がまだ残っているかどうかを判定し、まだ残って
いればステップ1102に進み、残っていなければ具象
化ファクト節格納処理を終了する。
引数項がまだ残っているかどうかを判定し、まだ残って
いればステップ1102に進み、残っていなければ具象
化ファクト節格納処理を終了する。
【0124】以上述べたプログラム節の格納処理方法に
より、ファクト節、ルール節および連体修飾節を図1で
示したデータ構造に格納できる。
より、ファクト節、ルール節および連体修飾節を図1で
示したデータ構造に格納できる。
【0125】図12は、本発明の方法を実施するための
装置構成例を示す図である。1201は本発明の方法を
実現するプログラム手段およびプログラム節を格納する
記憶装置である。1022はCPUであり、1023は
プログラム節や質問ゴール節を入力する入力装置である
。1024は質問ゴール処理の結果である解代入を出力
するための表示装置である。
装置構成例を示す図である。1201は本発明の方法を
実現するプログラム手段およびプログラム節を格納する
記憶装置である。1022はCPUであり、1023は
プログラム節や質問ゴール節を入力する入力装置である
。1024は質問ゴール処理の結果である解代入を出力
するための表示装置である。
【0126】
【発明の効果】知識の集合SSを仮定する。SSにS1
1とS12を加えた知識に対する従来の質問処理方式に
よる処理過程と、SSにS13を加えた知識に対する本
発明の質問処理方式による処理過程とを比較する。
1とS12を加えた知識に対する従来の質問処理方式に
よる処理過程と、SSにS13を加えた知識に対する本
発明の質問処理方式による処理過程とを比較する。
【0127】選択式がQ5以外のとき、従来の質問処理
方式と本発明の質問処理方式による処理過程に差異はな
い。一方、選択式がQ5であったとき、従来の質問処理
方式では、述語Aについての単一化処理(ユニフィケー
ション)と述語B1から述語Bnについての単一化処理
で計n+1回の単一化処理で正解代入{d’:Y/c1
}が求まる。本発明の質問処理方式によれば、連体修飾
節S13の格納時には、S13がルール節S11とファ
クト節S12およびS14に展開されて格納される。こ
のため、選択式Q5に対して、S14を入力節とした1
回の単一化処理で同じ正解代入が得られる。また、ルー
ル節S11が入力節として選択されるときにはファクト
節S12がマスクされるので重複して正解代入を求める
冗長な処理も発生しない。
方式と本発明の質問処理方式による処理過程に差異はな
い。一方、選択式がQ5であったとき、従来の質問処理
方式では、述語Aについての単一化処理(ユニフィケー
ション)と述語B1から述語Bnについての単一化処理
で計n+1回の単一化処理で正解代入{d’:Y/c1
}が求まる。本発明の質問処理方式によれば、連体修飾
節S13の格納時には、S13がルール節S11とファ
クト節S12およびS14に展開されて格納される。こ
のため、選択式Q5に対して、S14を入力節とした1
回の単一化処理で同じ正解代入が得られる。また、ルー
ル節S11が入力節として選択されるときにはファクト
節S12がマスクされるので重複して正解代入を求める
冗長な処理も発生しない。
【0128】このように、本発明の質問処理方式によれ
ば正解代入を求めるための単一化処理の回数を削減でき
るため、質問処理を高速化する効果がある。
ば正解代入を求めるための単一化処理の回数を削減でき
るため、質問処理を高速化する効果がある。
【図1】プログラム節を格納するデータ構造を表す図で
ある。
ある。
【図2】質問ゴール処理で使用するスタックのデータ構
造を表す図である。
造を表す図である。
【図3】質問ゴール処理を表すフローチャートである。
【図4】質問ゴール処理における入力節選択処理の詳細
を表すフローチャートである。
を表すフローチャートである。
【図5】質問ゴール処理における入力節選択処理の詳細
を表すフローチャートである。
を表すフローチャートである。
【図6】質問ゴール処理における入力節選択処理の詳細
を表すフローチャートである。
を表すフローチャートである。
【図7】質問ゴール処理の過程におけるスタックの状態
を表す図である。
を表す図である。
【図8】プログラム節入力時に使用する変数名テーブル
のデータ構造を表す図である。
のデータ構造を表す図である。
【図9】入力プログラム節の展開処理を表すフローチャ
ートである。
ートである。
【図10】入力プログラム節の展開処理における連体修
飾節格納処理の詳細を表すフローチャートである。
飾節格納処理の詳細を表すフローチャートである。
【図11】連体修飾節格納処理における具象化ファクト
節格納処理の詳細を表すフローチャートである。
節格納処理の詳細を表すフローチャートである。
【図12】本発明の方法を実施するための装置構成例を
表す図である。
表す図である。
101…インデクスセル格納エリア、102…述語セル
格納エリア、103…ボディ部述語セル格納エリア、1
04…インデクスセル、105…述語名フィールド、1
06…述語セルポインタ、107…ポインタ述語セル、
108…マスクフラグ、109…ヘッド部節フィールド
、110…マスク述語セルポインタ、111…ボディ部
ポインタ、112…ボディ部述語セル、113…ボディ
部節フィールド、114…マスク述語セルポインタ、1
15…ボディ部次節ポインタ。
格納エリア、103…ボディ部述語セル格納エリア、1
04…インデクスセル、105…述語名フィールド、1
06…述語セルポインタ、107…ポインタ述語セル、
108…マスクフラグ、109…ヘッド部節フィールド
、110…マスク述語セルポインタ、111…ボディ部
ポインタ、112…ボディ部述語セル、113…ボディ
部節フィールド、114…マスク述語セルポインタ、1
15…ボディ部次節ポインタ。
Claims (2)
- 【請求項1】ルール節およびファクト節を有するプログ
ラム節を処理対象とする継承階層論理型言語処理系にお
いて、前記ルール節のボディ部の基本式を満足する基礎
代入が知られている前記ルール節に対して、該ルール節
のヘッド部およびボディ部の各基本式にその基礎代入を
行った前記ファクト節とその参照可否情報とをメモリに
格納し、ゴール節の処理中、入力節として選択されたル
ール節の処理開始時に当該ルール節のヘッド部およびボ
ディ部の各基本式の基礎代入例であるファクト節の参照
可否情報を参照不可に設定し、当該ルール節の処理終了
時に、前記参照可否情報を参照可に再設定し、該参照可
否情報が参照不可と設定されているファクト節は入力節
として選択しないことを特徴とする継承階層論理型言語
の処理方法。 - 【請求項2】前記ルール節のヘッド部およびボディ部の
各基本式に基礎代入を行った前記プログラム節を前記フ
ァクト節として格納する際に、前記ルール節のヘッド部
およびボディ部のデータエリア内にその基礎代入例であ
る前記ファクト節へのポインタを保持し、前記ゴール節
の処理中、前記入力節として選択された前記ルール節の
処理開始時にそのポインタによって指される前記ファク
ト節の参照可否情報を参照不可に設定し、当該ゴール節
に対する当該ルール節の処理終了時にそのポインタによ
って指されるファクト節の参照可否情報を参照可に設定
することを特徴とする請求項1記載の継承階層論理型言
語の処理方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11286391A JPH04340626A (ja) | 1991-05-17 | 1991-05-17 | 継承階層論理型言語の処理方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11286391A JPH04340626A (ja) | 1991-05-17 | 1991-05-17 | 継承階層論理型言語の処理方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH04340626A true JPH04340626A (ja) | 1992-11-27 |
Family
ID=14597415
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP11286391A Pending JPH04340626A (ja) | 1991-05-17 | 1991-05-17 | 継承階層論理型言語の処理方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH04340626A (ja) |
-
1991
- 1991-05-17 JP JP11286391A patent/JPH04340626A/ja active Pending
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP0365309B1 (en) | A data unification system and method | |
| CN1910601B (zh) | 限制条件解决方法、限制条件解决装置、以及限制条件解决系统 | |
| US20040205751A1 (en) | Virtual supercomputer | |
| Hoare | Parallel programming: An axiomatic approach | |
| van Emden | An Interpreting Algorithm for Prolog Programs. | |
| US5301260A (en) | Inference processor using data consistency holder | |
| Raman | Eliminating amortization: on data structures with guaranteed response time | |
| US5878260A (en) | Information handling system, method, and article of manufacture including object name services with multilevel indices | |
| AU4966690A (en) | Rule optimization in signed processing | |
| US6092092A (en) | Gap-based style-run array mechanism | |
| Kobbaey et al. | Data structures and algorithms with python | |
| EP0511437A1 (en) | Computer system | |
| JPH11232109A (ja) | クラスオブジェクトのロード方法 | |
| Lundqvist et al. | Using object oriented methods in Ada 95 to implement linda | |
| Howard | Another iteration on “A synthesis of several sorting algorithms” | |
| JPH10214191A (ja) | オブジェクト指向プログラミングに適用される開発支援装置および開発支援方法 | |
| Butler et al. | Performing algorithmic refinement before data refinement in B | |
| JPH0231232A (ja) | データ処理装置 | |
| Prabhala et al. | A comparison of instruction sets for stack machines | |
| Jones | A formal semantics for a DataFlow Machine—Using VDM | |
| Long | C++ Classes for the E cient Manipulation and Storage of Hierarchical Objects | |
| JPH0731601B2 (ja) | 情報処理装置 | |
| Ogihara | Generic Class Parameters and the Java Collection Framework | |
| Duncan | Studies in program correctness. | |
| JPH02108127A (ja) | エキスパートシステムの推論制御方法 |