JPH03196335A - 論理型プログラム処理方式 - Google Patents
論理型プログラム処理方式Info
- Publication number
- JPH03196335A JPH03196335A JP33793589A JP33793589A JPH03196335A JP H03196335 A JPH03196335 A JP H03196335A JP 33793589 A JP33793589 A JP 33793589A JP 33793589 A JP33793589 A JP 33793589A JP H03196335 A JPH03196335 A JP H03196335A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- clause
- argument
- program
- information
- 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
- 238000000034 method Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 7
- 238000003672 processing method Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 150000001875 compounds Chemical class 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
[産業上の利用分野]
この発明は、プロログ(Prolog)のように推論を
行う述語で記述された論理型プログラムの処理方式に関
するものである。
行う述語で記述された論理型プログラムの処理方式に関
するものである。
[従来の技術]
これまでのノイマン型コンピュータに替り、三段論法に
代表される推論処理を行う推論コンピュータが近年開発
されている。推論コンピュータで実行される論理型プロ
グラミング言語の代表的なものとしては、prolog
が知られている。
代表される推論処理を行う推論コンピュータが近年開発
されている。推論コンピュータで実行される論理型プロ
グラミング言語の代表的なものとしては、prolog
が知られている。
第1図は、WAM (Warren Abstract
Machine)として知られている。 Prolo
gで記述されたプログラムの処・現方式を実現するため
の装置の一例を示すブロック図である。
Machine)として知られている。 Prolo
gで記述されたプログラムの処・現方式を実現するため
の装置の一例を示すブロック図である。
図において、1は演算処理装置、2は論理型言語Pro
logで記述されたプログラムをコンパイルして得られ
た命令列を保持する命令コード記憶装置、3はバックト
ラックの際に復帰すべき情報と節の実行環境とを保持す
るローカルスタック、4は入城変数及び複合項を保持す
るグローバルスタック、5はバックトラックの際に無効
化すべき変数のアドレスを保持するトレイルスタック、
6は述語呼出しの実引数、すなわちゴール引数や一時変
数を保持する引数レジスタ群、7は上記命令コード記憶
装置2及び各スタック3〜5のアドレスなどを保持する
制御レジスタ群である。なお、(1) (2) 同図において、命令コード記憶装置2と各スタック3〜
5及び各レジスタ群6,7は、別々の記憶装置に割り当
てるように記述しているが、それらの一部または全てを
同一の記憶装置に割り当てても構わない。
logで記述されたプログラムをコンパイルして得られ
た命令列を保持する命令コード記憶装置、3はバックト
ラックの際に復帰すべき情報と節の実行環境とを保持す
るローカルスタック、4は入城変数及び複合項を保持す
るグローバルスタック、5はバックトラックの際に無効
化すべき変数のアドレスを保持するトレイルスタック、
6は述語呼出しの実引数、すなわちゴール引数や一時変
数を保持する引数レジスタ群、7は上記命令コード記憶
装置2及び各スタック3〜5のアドレスなどを保持する
制御レジスタ群である。なお、(1) (2) 同図において、命令コード記憶装置2と各スタック3〜
5及び各レジスタ群6,7は、別々の記憶装置に割り当
てるように記述しているが、それらの一部または全てを
同一の記憶装置に割り当てても構わない。
第2図は、論理型言語Prologで記述したプログラ
ムの一例である。
ムの一例である。
第6図は、第2図に示したプログラムを従来方式でコン
パイルした結果として得られる命令列である。同図にお
いて、節の選択に関する命令は以下のように説明される
。
パイルした結果として得られる命令列である。同図にお
いて、節の選択に関する命令は以下のように説明される
。
try me else Label
は、バックトラックの際にLabelに対応する節。
すなわち第2図に示したプログラム中の述語Pの第2番
目の節を実行することができるように、ローカルスタッ
ク3へ情報を保存することを指示する命令である。
目の節を実行することができるように、ローカルスタッ
ク3へ情報を保存することを指示する命令である。
5w1tch on term var=Lvar、c
onst=Lconst。
onst=Lconst。
1ist=L1ist、5truct=Lstruct
は、第1引数内に格納されたデータの型により分岐を行
う命令である。すなわち、データが未定義変数である場
合にはLvarに対応する命令に、アトムまたは数であ
る場合には1constに対応する命令に、リストであ
る場合にはLlistに対応する命令に、複合類である
場合にはLstructに対応する命令に分岐を行う命
令である。
は、第1引数内に格納されたデータの型により分岐を行
う命令である。すなわち、データが未定義変数である場
合にはLvarに対応する命令に、アトムまたは数であ
る場合には1constに対応する命令に、リストであ
る場合にはLlistに対応する命令に、複合類である
場合にはLstructに対応する命令に分岐を行う命
令である。
5w1tcJon−constant ]:L2.2:
L3. else:L4は、第1引数内に格納されたデ
ータの値により分岐を行う命令である。例えば、上記の
ようなパラメータが指定されると、データが1である場
合にはL2に対応する命令に、2である場合にはL3に
対応する命令に、それ以外の場合にはL4に対応する命
令に分岐を行う命令である。
L3. else:L4は、第1引数内に格納されたデ
ータの値により分岐を行う命令である。例えば、上記の
ようなパラメータが指定されると、データが1である場
合にはL2に対応する命令に、2である場合にはL3に
対応する命令に、それ以外の場合にはL4に対応する命
令に分岐を行う命令である。
try Label
は、5w1tch on termまたは5w1tch
on constant命令で分岐された後も更に複
数の選択肢が残された場合に用いられる命令で、Lab
elに対応する節が失敗してバックトラックする際9次
命令を実行する命令である。すなわち、第2図に示した
プログラム中の述語qの第2番目の節を実行することが
(3) できるように、ローカルスタック3へ情報を保存するこ
とを指示する命令である6 更に、小長谷明彦による″論理型言語処理装置″(特開
昭81−194538号、昭和61年8月28日)では
、引数レジスタの特定の1つを第1オペランドで指定し
、該引数レジスタ内に格納されたデータまたは該引数レ
ジスタからの参照先データが構造体のときに該構造体の
フアンクタにエンコードされた鍵値を第2オペランドと
して与えられたマスク値によりマスクして得られた値に
応じて分岐を行う命令処理手段を提案している。すなわ
ち、第1引数以外の任意の引数も鍵値として選択するこ
とができる。更に、多重インデクシングを用いて2つ以
上の引数のデータの型、あるいは値により分岐すること
を可能とする。しかし、この手法をpに直接適用するこ
とができない。適用するためにはプログラマがこの最適
化機構の有無を認識し、第7図のようにプログラムを書
き換える必要があり、プログラムの書き易さ、読み易さ
が損なわれる。
on constant命令で分岐された後も更に複
数の選択肢が残された場合に用いられる命令で、Lab
elに対応する節が失敗してバックトラックする際9次
命令を実行する命令である。すなわち、第2図に示した
プログラム中の述語qの第2番目の節を実行することが
(3) できるように、ローカルスタック3へ情報を保存するこ
とを指示する命令である6 更に、小長谷明彦による″論理型言語処理装置″(特開
昭81−194538号、昭和61年8月28日)では
、引数レジスタの特定の1つを第1オペランドで指定し
、該引数レジスタ内に格納されたデータまたは該引数レ
ジスタからの参照先データが構造体のときに該構造体の
フアンクタにエンコードされた鍵値を第2オペランドと
して与えられたマスク値によりマスクして得られた値に
応じて分岐を行う命令処理手段を提案している。すなわ
ち、第1引数以外の任意の引数も鍵値として選択するこ
とができる。更に、多重インデクシングを用いて2つ以
上の引数のデータの型、あるいは値により分岐すること
を可能とする。しかし、この手法をpに直接適用するこ
とができない。適用するためにはプログラマがこの最適
化機構の有無を認識し、第7図のようにプログラムを書
き換える必要があり、プログラムの書き易さ、読み易さ
が損なわれる。
(4)
[発明が解決しようとする課題]
以上説明したように、従来方式においては第2図に示し
た述語pのような節集合に対しては、レジスタごとの型
、値の情報のみでは分岐することができず、バック1〜
ラツクのためにローカルスタックに各種情報を保存する
ことが必要となる。
た述語pのような節集合に対しては、レジスタごとの型
、値の情報のみでは分岐することができず、バック1〜
ラツクのためにローカルスタックに各種情報を保存する
ことが必要となる。
これらの情報の保存及び除去の処理、すなわち選択肢フ
レームの生成及び除去の処理のコストは一般に高く、選
択肢に関する処理の速度を低下させるという問題点があ
った。また、これを避けるためにはプログラムの変更が
必要となり、プログラムの書き易さ、読み易さが損なわ
れるのみでなく新しい述語の呼出しのコストが増加する
という問題点があった。
レームの生成及び除去の処理のコストは一般に高く、選
択肢に関する処理の速度を低下させるという問題点があ
った。また、これを避けるためにはプログラムの変更が
必要となり、プログラムの書き易さ、読み易さが損なわ
れるのみでなく新しい述語の呼出しのコストが増加する
という問題点があった。
この発明は上記のような問題点を解消するためになされ
たもので、選択肢に関する処理を高速に実行することが
できる論理型プログラム処理方式を得ることを目的とす
る。
たもので、選択肢に関する処理を高速に実行することが
できる論理型プログラム処理方式を得ることを目的とす
る。
[課題を解決するための手段]
この発明に係る論理型プログラム処理方式は、(5)
(6)
述語呼出しの実引数を格納する引数レジスタからの参照
先データが構造体のときに該当構造体のフアンクタ及び
複数個の要素の情報をもとに該当する節を選択するよう
にしたものである。
先データが構造体のときに該当構造体のフアンクタ及び
複数個の要素の情報をもとに該当する節を選択するよう
にしたものである。
[作用]
この発明における論理型プログラム処理方式は、前記の
ような構造体のフアンクタ及び複数個の要素をもとに該
当する節のみを選択する機能を用いることにより、選択
肢フレームを生成する命令を省いて選択肢フレームの生
成及び除去の処理を取り除くことができ、高速に対応す
る節を選択する。
ような構造体のフアンクタ及び複数個の要素をもとに該
当する節のみを選択する機能を用いることにより、選択
肢フレームを生成する命令を省いて選択肢フレームの生
成及び除去の処理を取り除くことができ、高速に対応す
る節を選択する。
[実施例]
以下、この発明の一実施例を図について説明する。なお
、本発明の一実施例による処理方式を実現するための装
置のブロック図は前記第1図と同様であり、第2図に示
したプログラム例を用いて説明する。
、本発明の一実施例による処理方式を実現するための装
置のブロック図は前記第1図と同様であり、第2図に示
したプログラム例を用いて説明する。
第3図は引数レジスタ群6の任意のレジスタを鍵値とし
て節を選択する機能を付加した命令である。これらは、
小長谷明彦による″論理型言語処理装置” (特開昭6
1−194538号、昭和61年8月28日)の適用の
ために拡張された命令列と同様である。すなわち、オペ
ランドで指定したレジスタの値をデリファレンスして得
られるデータを鍵値として、そのデータ型あるいは値に
よって分岐する命令である。
て節を選択する機能を付加した命令である。これらは、
小長谷明彦による″論理型言語処理装置” (特開昭6
1−194538号、昭和61年8月28日)の適用の
ために拡張された命令列と同様である。すなわち、オペ
ランドで指定したレジスタの値をデリファレンスして得
られるデータを鍵値として、そのデータ型あるいは値に
よって分岐する命令である。
第4図は、第2図に示したプログラムのうち。
述語pを本方式を用いてコンパイルした結果として得ら
れた命令列である。同図において、本方式の、実引数を
格納する引数レジスタからの参照先データが構造体のと
きに該当構造体のフアンクタ及び複数個の要素を取り出
すために、4c。
れた命令列である。同図において、本方式の、実引数を
格納する引数レジスタからの参照先データが構造体のと
きに該当構造体のフアンクタ及び複数個の要素を取り出
すために、4c。
4d、4eの命令を用い、更にそれらの情報により分岐
するために命令 5w1tch on term X2゜var=L4
、 const=L5 、 l i 5t=fai 1
、5truct=L6を用いる。これは第4図の4f
の命令であり、レジスタx2に格納されている値のデー
タ型が変数のときラベルL4に、定数のときラベルL5
に、構造体(7) のときラベルL6に進み、リストのとき失敗することを
示す。
するために命令 5w1tch on term X2゜var=L4
、 const=L5 、 l i 5t=fai 1
、5truct=L6を用いる。これは第4図の4f
の命令であり、レジスタx2に格納されている値のデー
タ型が変数のときラベルL4に、定数のときラベルL5
に、構造体(7) のときラベルL6に進み、リストのとき失敗することを
示す。
次に、これらの命令を用いた処理の流れを説明する。第
5図はこれらの命令を含む述語Pの処理を本発明に従っ
て処理した際のフローチャートであり、第4図の各命令
に付された符号48〜4zを用いてその対応を示す。こ
こで、述語pは、p([end]) のゴールによって呼び出されたものとする。レジスタA
Iには[end]が格納されており、そのデータ型はリ
ストなので、そのCarであるendをx2に。
5図はこれらの命令を含む述語Pの処理を本発明に従っ
て処理した際のフローチャートであり、第4図の各命令
に付された符号48〜4zを用いてその対応を示す。こ
こで、述語pは、p([end]) のゴールによって呼び出されたものとする。レジスタA
Iには[end]が格納されており、そのデータ型はリ
ストなので、そのCarであるendをx2に。
cdrである[]をx3に格納する。このときx2のデ
ータ型は定数であり、値がendであるので、cdrで
あるX3による分岐に進む。そして、x2の分岐と同様
にそのデータ型及びその値により、該当する節であるp
([endl)ニーi、に辿り着く。このとき選択肢フ
レームを生成することなく、単に分岐のみで目標とする
節を高速に選択することができる。
ータ型は定数であり、値がendであるので、cdrで
あるX3による分岐に進む。そして、x2の分岐と同様
にそのデータ型及びその値により、該当する節であるp
([endl)ニーi、に辿り着く。このとき選択肢フ
レームを生成することなく、単に分岐のみで目標とする
節を高速に選択することができる。
[発明の効果]
以−ヒのように、この発明によれば、簡単な機能(8)
追加を行うことにより、述語呼出しの実引数を格納する
引数レジスタからの参照先データが構造体のときに該当
構造体のフアンクタ及び複数個の要素の情報を利用した
分岐により、プログラムを変更することなく選択肢フレ
ームの生成及び除去の処理を省略することができ、節の
選択を高速に行うことができる効果がある。
引数レジスタからの参照先データが構造体のときに該当
構造体のフアンクタ及び複数個の要素の情報を利用した
分岐により、プログラムを変更することなく選択肢フレ
ームの生成及び除去の処理を省略することができ、節の
選択を高速に行うことができる効果がある。
第1図は本発明の一実施例による処理方式を実現するた
めの装置のブロック図、第2図は論理型言語Prolo
gのプログラム例を示す図、第3図は本発明の一実施例
による処理方式を実現するために用いられる。オペラン
ドで指定したレジスタの値をデリファレンスして得られ
るデータを鍵値としてそのデータ型あるいは値によって
分岐する命令を示す図、第4図は本発明に従って第2図
のプログラムをコンパイルした結果として得られる命令
列を示す図、第5図は第4図の命令列を本発明に従って
実行した処理の流れを示すフローチャート、第6図は第
2図のプログラムを従来方式でコ(9) (10) ンパイルした結果として得られる命令列を示す図、第7
図は第2図のプログラムを書き換えたプログラムを示す
図である。 1は演算処理装置、2は命令コード記憶装置、3はロー
カルスタック、4はグローバルスタック、5はトレイル
スタック、6は引数レジスタ群、7は制御レジスタ群。
めの装置のブロック図、第2図は論理型言語Prolo
gのプログラム例を示す図、第3図は本発明の一実施例
による処理方式を実現するために用いられる。オペラン
ドで指定したレジスタの値をデリファレンスして得られ
るデータを鍵値としてそのデータ型あるいは値によって
分岐する命令を示す図、第4図は本発明に従って第2図
のプログラムをコンパイルした結果として得られる命令
列を示す図、第5図は第4図の命令列を本発明に従って
実行した処理の流れを示すフローチャート、第6図は第
2図のプログラムを従来方式でコ(9) (10) ンパイルした結果として得られる命令列を示す図、第7
図は第2図のプログラムを書き換えたプログラムを示す
図である。 1は演算処理装置、2は命令コード記憶装置、3はロー
カルスタック、4はグローバルスタック、5はトレイル
スタック、6は引数レジスタ群、7は制御レジスタ群。
Claims (1)
- 【特許請求の範囲】 述語呼出しの実引数を格納する引数レジスタ群を備え、
推論を行う述語で記述された論理型プログラムの処理に
際して上記引数レジスタ群を用いて選択肢に関する処理
を行う論理型プログラム処理方式において、 上記引数レジスタからの参照先データが構造体のときに
該当構造体のフアンクタ及び複数個の要素の情報をもと
に該当する節を選択するようにしたことを特徴とする論
理型プログラム処理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP33793589A JPH03196335A (ja) | 1989-12-26 | 1989-12-26 | 論理型プログラム処理方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP33793589A JPH03196335A (ja) | 1989-12-26 | 1989-12-26 | 論理型プログラム処理方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH03196335A true JPH03196335A (ja) | 1991-08-27 |
Family
ID=18313385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP33793589A Pending JPH03196335A (ja) | 1989-12-26 | 1989-12-26 | 論理型プログラム処理方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH03196335A (ja) |
-
1989
- 1989-12-26 JP JP33793589A patent/JPH03196335A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6094528A (en) | Method and apparatus for system building with a transactional interpreter | |
JPH0475139A (ja) | ループ並列化装置 | |
JPH01306923A (ja) | 異種言語間連絡方式 | |
Barbacci et al. | Programming at the processor-memory-switch level | |
Fisher | Control structures for programming languages | |
EP0578646B1 (en) | Privileged instruction trap for operating system control | |
KR20060114722A (ko) | 컴퓨팅 시스템 | |
JP2752094B2 (ja) | 論理型言語におけるバックトラック処理方式 | |
Beer | Concepts, design, and performance analysis of a parallel prolog machine | |
JPH03196335A (ja) | 論理型プログラム処理方式 | |
JPH03132824A (ja) | 論理型プログラム処理方式 | |
Hanson | Variable associations in SNOBOL4 | |
JPH0258129A (ja) | 論理型プログラム処理方式 | |
Spertus et al. | Experiments with Dataflow on a General-Purpose Parallel Computer | |
Zhang et al. | Parallel execution of temporal logic programs using dataflow computation | |
Marti | Compilation techniques for a control-flow concurrent LISP system | |
Lucanu et al. | Towards a K ool Future | |
Hasegawa et al. | A list‐processing‐oriented data flow machine architecture and its evaluation | |
Royko | The Dynamic Mapping Architecture | |
JPS623341A (ja) | 条件付制御方法 | |
JPH01270138A (ja) | 論理型言語処理装置 | |
JPS6249546A (ja) | 論理型言語処理装置 | |
JPS62144237A (ja) | バックトラック方式 | |
Jelsina et al. | Data flow architecture for the parallel implementation of the functional language | |
Kakizaki et al. | Development of C-Prolog compiler |