JPS6155736A - プロロ−グマシン - Google Patents

プロロ−グマシン

Info

Publication number
JPS6155736A
JPS6155736A JP17680084A JP17680084A JPS6155736A JP S6155736 A JPS6155736 A JP S6155736A JP 17680084 A JP17680084 A JP 17680084A JP 17680084 A JP17680084 A JP 17680084A JP S6155736 A JPS6155736 A JP S6155736A
Authority
JP
Japan
Prior art keywords
goal
tag
variable
register
clause
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
Application number
JP17680084A
Other languages
English (en)
Inventor
Kaoru Kiriyama
桐山 薫
Shigeo Abe
阿部 重夫
Kenichi Kurosawa
黒沢 憲一
Tadaaki Bando
忠秋 坂東
Hiroaki Nakanishi
宏明 中西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP17680084A priority Critical patent/JPS6155736A/ja
Publication of JPS6155736A publication Critical patent/JPS6155736A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔発明の利用分野〕 本発明は、知識処理に適したプロローグマシンに関する
ものでちる。
〔発明の背景〕
プロローグ言語は論理型言語と呼ばれ、事物の性質や事
物間の関係を述語で表わし、これらの述語を事実や規則
の文にしてプログラムを構成するもので、知識処理の研
究に適した言語と言われている。このプロローグ言語に
は、ある述語が成功するための規則が複数個存在した場
合、どれか一つを選択してその規則に従って実行する途
中で失敗が生じると、他の規則を選択しなおしてそれに
従って実行を試みるというバックトランク機能が付与さ
れている。例として下記を考える。
(1)好物(A、X)ニー色(X、赤)、形(X。
丸い) (2)色(トマト、赤) (3)形(トマト、丸い) (1)は”Xの色が赤でかつXの形が丸いならば、Aは
Xを好む″という規則を示している。(2)は1トマト
の色は赤”、(3)は1トマトの形は丸い2という事実
を示している。これらの(1)〜(3)は節と呼び、節
(1)は特に規則、節(2)、(3)は事実、好物、色
、形等は述語と呼ぶ。また節(1)の中で @、  m
より左辺の好物(A、X)は頭部、゛ニー″よシ右辺の
色(X、赤)、形(X、丸い)は本体と呼び、またこの
頭部、本体はいずれもゴールと呼ぶ。
述語の後のかっこ内の引数の内、赤、丸い、トマト等(
通常これらは小文字の英単語で書かれる)は定数と呼び
、A、X等の大文字は変数と呼ぶ。
更に例えば)i:van ’I’ick &、 ])a
v id Warren着の’I’owards a 
pipelined Prolog processo
r(2nd 工nternational Simpo
sium on Logicprograrrming
 Feb、 84)においては頭部に1回だけ、本体に
1回だけ、もしくは頭部と本体の最初にだけしか現われ
ないものを一時変数(例えば(1)節のA ) 、その
他を大域変数(例えば(1)節のX)と呼ぶ。これらに
対応して、実行の際に呼びだし側の引数を格納するため
のアーギュメントレジスタ(A−reg)と、大域変数
や呼びだし側のゴールが別辞をもつときのアーギュメン
トレジスタの内容をつむためのローカルスタック(LS
)を設ケる。そして、ローカルスダックのメモリ容量の
削減を図るために、節の最後のゴールを呼ぶためのアー
ギュメントレジスタのセットが終った段階で、その節の
別辞がないときは、ローカルスタック上の大域変数を解
放する方式を採っている(これl’l’a!1 i(、
ecursionという)0しかしながら、この方式で
は、頭部のゴールに現われない大域変数(これを非安定
変数という)であってその値がまだ与えられていない時
は、メモリ上に別エリアを確保してそこヘコピーしてか
らローカルスタッフ上の当該変数領域を解放する必要が
あった。即ち、この時アーギュメントレジスタの当該変
数対応のエリアにはローカルスタックへのポインタがタ
グrefとともに残っておシ(値がバインドされていれ
ばこれはポインタではなく定数になっている)、従って
ローカルスタックの方だけを無条件に解放してしまうと
このポインタの行先が失われてしまうからである。この
ため、この方式では、メモリアクセスの回数が増えると
ともに、コピーエリアを確保するという操作が必要とな
っていた。このことを例によって説明する。今3つの節 (4)好物(A、食べる)ニー色(X、赤)、形(X、
丸い) (5)色(P、赤) (6)形(トマト、丸い) と考え、このプログラムに対して ?−好物(タロ、Q) という質問をしたとする。そうすると (イ)まず、質問文の変数領域(Q)をローカルスタッ
ク(LS)上に生成する。この状況S1は第1図に示さ
れており、タグ部のundfはそのデータが値の定まっ
ていない(束縛されていない)変数であることを示して
いる。
(ロ)質問文(?−好物(タロ、Q))の引数をアーギ
ュメントレジスタ(A−reg)上に第1図状mt82
のように積む。アーギュメントレジスタ上のQのタグは
、そのデータ部がポインタである゛ことを示すrefと
なっておシ、既にローカルスタック上に生成されている
Qへのポインタが入っていることを示している。
G−→ ここで?好物(タロ、Q)と一致する節を順番
に探すと、節(4)の頭部と一致するから、ローカルス
タック上に節(4)の非安定変数であるXの変数領域が
第1図状883のように生・成される。ここでタグun
safe undfはその変数がまだ値を与えられてい
ない非安定変数であることを示している。
に) ?好物(タロ、Q)と好物(A、食べる)のユニ
イフイケーションを試してみることによシ、アーギュメ
ントレジスタの人1に積まれたタロと頭部第1引数の人
とがマツチし、A2に積まれたQと食べるのマツチング
が成功し、これによってローカルスタック上のQには′
食べる″が入る(そのタグは定数を示すatom)。但
し変数Aは一時変数であるのでローカルスタック、アー
ギュメントレジスタの内容には関係しない。この状態は
第1図84に示されている。
(ホ)次に節(4)の本体の第1ゴールに移り、?−好
物(X、赤)の引数をアーギュメントレジスタ上に積む
と第1図状態S5となる。アーギュメントレジスタ上の
Xのタグはrefとなって、そのデータ部には既にロー
カルスタック上に生成されているXへのポインタが入る
(へ) ここで?−色(X、赤)と一致する節を順番に
探すと節(5)と一致することがわかる。そこで色(X
、 赤)と色(P、赤)のユニフイケーシヨンを試みる
ことにより、XとPが対応しくAl’ )赤と赤が対応
づいて(A2’ )成功する。この時レジスタ等の状態
は第1図85と同じである。またPに関しては一時変数
なので、ローカルスタック、アーギュメント上にあられ
れない。
(ト)さらに、形(X、丸い)の引数をアーギュメント
レジスタ上に積むが、このゴールは節(4)の最後のゴ
ールであり、節(4)の本体の他のゴール、すなわち色
(X、赤)には別辞がない。従って前述したようにロー
カルスタック上の大域変数Xの解放が行われるが、その
前に非安定変数でその値が束縛されていないXに対して
は、その参照先をメ′モリ上の別エリアに生成しておく
(第1図fs6)。
(イ)この別エリアの生成を終って実際にローカルスタ
ック上のXが解放される。
以上のように、従来の方式では未束縛な非安定変数を確
保するために、メモリ上に別のエリアを必要とし、かつ
そのエリアの生成のためにメモリアクセスの時間がかか
るという欠点があった。
〔発明の目的〕
本発明の目的は、スタック解放時にメモリ上の別エリア
にマツプする必要のない機構をもつプロローグマシンを
提供することにある。
〔発明の概要〕
本@明は、節の最後のゴールの引数の値をアーギュメン
トレジスタにセットする時には非安定変数はその節円の
前ゴールやその節を呼びだしたゴールに参照されること
はなく、またその最後のゴールから呼びだされる節に対
しては、そのときセットしたアーギュメントレジスタか
ら値を参照することができることに着目し、もしその節
の最終ゴールをのぞく別のゴールに別辞がない場合には
セットするアーギュメントレジスタの非安定変数の領域
のタグundf″をセットするようにしたことを特徴と
するものである。即ち、 (1)非安定変数が他のゴールの値とマツチする場合を
考えてみる。
(a)AC)ニーB(Y、  )、C(Y、  ’)上
の(a)節のゴールCを呼ぶ前に、その引数はアーギュ
メントレジスタにセットされる。ここで非安定変数Yが
ゴール人の引数とマツチするのは、At−呼ぶゴールが
含まれる節の大域変数が第2図のように結ばれているか
、又は、Yにゴール人で決まった値が入った場合であシ
、また非安定変数YがゴールBの引数とマツチしてアー
ギュメントレジスタのYに渡した値は、その後のユニフ
ィケーションで必要としない。
C) (4A()ニーB(Y、   )、C(Y、   )の
)C(a、   )ニー〜 上に示すプログラムの場合、(a)節のゴールCによっ
て(b)節が呼ばれ、Yが定数aとマツチしてその後の
ユニフィケーションに関係しない。
(a)A()ニーB(Y、   )、C(Y、   )
(c)C(Z、  )ニー〜(2は一時変数)上に示す
プログラムの場合、(a)節のゴールCによって(C)
節が呼ばれ、Yが一時変数2とマツチしたら、アーギュ
メントレジスタの書きかえとともにYの値は不要となる
Ca)AC)ニーB(Y、  )、C(Y、   )(
d)C(Z、  )ニー〜(2は大域変数)上に示すプ
ログラムの場合、(a)節のゴールCによって(d)節
が呼ばれ、Yが大域変数2とマツチしたら、(d)節の
読み出しによってローカルスタック上につくられる大域
変数の領域を使用するようになυ、アーギュメントレジ
スタ上の領域はいらなくなる。
以上のようた、いずれの場合も従来のようにメモリ上の
別エリアを確保してアーギュメントレジスタ上の当該変
数の領域のポインタを残しておく必要はないことを本発
明は利用したものである。
〔発明の実施例〕
第3図は、本発明のマシンの、ハードウェアの一実施例
を示したもので、演算回路100には、レジスタ110
.8ビツトのALU 120、セレクタ130,32ビ
ツトのALUI 40.アーギュメントレジスタ150
、メモリライトレジスタ(MWR,) 160、メモリ
アドレスレジスタ(MAR)170、メモリリードレジ
スタ(Ml)180、メモリ190を有し、一方マイク
ロプ四グラムコントローラ200は、マイクロプログラ
ムメモリ210、マイクロプログラムインストラクショ
ンレジスタ(MPIR)220、マイクロプログラムア
ドレスレジスタ(MPAR)230  MPAR230
の内容を+1する加算器240、セレクタ制御信号発生
回路250、セレクタ260を有している。ALU12
0,140の演算結果のステータスを示す信号線300
,310はセレクタ制御信号発生回路250へ入力され
、信号線320からの信号は演算ユニット100の各部
を制御する。内部データの一語は8ビツトのタグ部と3
2ビツトのデータ部よυ構成され、メモリは40ビツト
長からなる。メモリ190にはMRR180から読みだ
された値、又はALU120,140で演算された値の
どちらかが、ALU120゜140からの出力によυ定
められたMAR170の示すアドレスにMWR160t
−介して書きこまれる。ALU120,140には、M
RR180又はレジスタ110の値と、M′fLR18
0又はAR150の値がそれぞれのタグとデータにわか
れて入力される。ALU120,140で演算、比較さ
れた結果は、AR150やレジスタ110又はMAR1
70に入力できる。
演算回路100はマイクロプログラムコントローラ20
0によって制御される。マイクロプログラムメモリ21
0の読みだしアドレスは、MPAR230の値に加算器
240で+1加えたアトしスかMP工几220からのア
ドレスのどちらかが、MPIR220のデータとALU
120,140からのステータス信号300,310と
に従って、セレクタ制御信号発生回路250によって選
択され、MPAR230にセットされる。このアドレス
によシメモリ210の内容がMPIR220に読み出さ
れる。
第4図は、第3図のマシン上で、ローカルスタックの解
放時に、メモリ上の別エリアにマツプを作らないスタッ
ク処理、りまシ本発明の特徴とする処理を実現するため
のプロローグの実行手順を示す。同図に於て各処理P1
〜P17の内容は次のようである。
(Pl) まず質問文の変数をローカルスタックLS上
に積む。
(P2) これからユニフィケーションを実行しようと
するゴール引数をアーギュメントレジスタ150に引数
の順序と同様につむ。
(P3) このゴールにマツチする節を探しだす。
これは述語名と引数の数によって実行する。
(P4)  P3の探索で一致する節があればP6へ、
なければP5へすすむ。
(P5) バックトラックが可能であれば、別辞の求め
られるところまでバックトラックを実行し、P2へもど
る。もしバックトラックが不可能ならば失敗して処理は
おわる。
(P6) ここでマツチした節の種類を判断する。
もし事実(fact)であればpHへ、規則(rule
)  であればPlにすすむ。
(Pl) マツチした節が規則のとき、まずその節の大
域変数をローカルスタック上につむ。
(P8) アーギュメントレジスタ150につまれた呼
び側のゴールの引数と等しい述語を有した頭部ゴールの
引数とのユニフィケーションを行ない、定数どうしの時
はそれらが一致するか否かを調べ、変数と定数のときは
変数に定数を代入し、変数どうしの時はそれらをポイン
タでむすぶ。
(P9)  以上のユニフィケーションの結果が成功す
ればPIOへ、失敗すれば別辞を得てP3へもどる。
(1) 10 )  頭部の成功により、次に本体の第
1のゴールが呼びだされ(P2)へもどる。
(pH)  処iP6の判定で、節の種類が事実のとき
は、規則の場合と同様にユニフイケーションを行なうが
、このとき大域変数は存在してい々いので、ローカルス
タック上には変数はつまない。
(PI3)  このユニフィケーションの結果が成功す
ればPI3へ、失敗すれば別辞を得てP3へもどる。
(PI3)  呼びだしたゴールが質問文かどうかを調
べ、もし質問文であれば全ての処理が終了し、成功して
終了であるが、そうでなければPI3へ進む。
(PI3)  次のゴールを得てPI3へ。
(PI3)  もし、当該節の最後のゴールを処理した
後であれば、次のゴールが筒中に存在しないので次のゴ
ールを得るためにPI3へ。
(PI3)  さらにその節を呼びだしたゴールを得て
PI3にもどる。同じ節で次のゴールを得たらPI3へ
すすむ。
(PI3)  ローカルスタックの解放処理、つまシス
タック処理の実行か否かを決めて処理を行う。
このスタック処理の手順は第5図に示されるよりにq1
〜q7よシ成る。
(ql) まずアーギュメントレジスタにつむゴールが
最後のゴールか否かを調べ、最後のゴールであればq3
へ、そうでなければq2へ進む。
(q2) 新しいゴールの引数をアーギュメントレジス
タにつんでqlへすすむ。
(q3) 現在のゴールを呼びだした節に別辞があった
かどうかを調べる。別辞がおれば筒中の大域変数は解放
できないのでq2へすすみ、別辞がなければq4へすす
む。
(q4) この節が非安定変数をもつかどうかを調べる
。非安定変数がなければ筒中の大域変数は無条件で解放
できるのでq5へ進み、もし非安定数があればqlへ進
む。
(q5) 新しいゴールの引数をアーギュメントレジス
タにつんで、qlへすすむ。
(q6) 非安定変数に対応するアーギュメントレジス
タ上の内容t−undfにかきかえてqlへ。
(ql) 筒中の大域変数をローカルスタックから解放
(次に大域変数をつむポインタを変える)してスタック
処理を終了する。
′以上の本発明のマシンの動作を前述したプログラム(
4)、 (s)、 (6)を例として具体的に説明する
と以下のようである。スタック処理は規則を表わす(4
)節の最後のゴールを呼びだしたときにおこる。第3図
のメモリ190の内容は第6図に示すようにセットされ
ている。スタック処理が開始されるとき、次のゴールと
して節(4)の10番目1にフェッチしている。即ちメ
モリ190からMRR,180にこの10番目の内容を
読み出し、ALU120゜140を通してタグ部を切り
だしてこのゴールが最後のゴールかどうかを判定する。
この場合“形”は最後のゴールであることがわかる。同
様にしてデータ部を切りだし、この述語に等しい述語を
頭部とした節をさがす。先頭アドレステーブルの5査目
よ9節(6)の先頭アドレス1番目を得る。また、この
筒中に別辞がなかったかどうかは、メモリ190内にあ
る制御情報をのこすためのスタック(これをコントロー
ルスタックという)よシわかる。この例の場合、別辞は
存在しない。このあとアーギュメントレジスタ150に
呼びだし側のゴールをつむ。このゴールの引数の数は2
個である。
節(4)の12番目をMAR170に設定し、メモリ1
90からMRR180へその内容を読みだし、人LU1
20,140t−使ってその判定をする。
この時タグは非安定かつundf (未定義)なので、
アーギュメントレジスタ1500A1にレジスタ内に設
けである” undf″t−ALUI 20.14.0
を通して代入する。続いて節(4)の13番目をMAR
170に設定し、メモリからMRR180へ読み出して
、ALU120,140t−使ってそのタグを判定する
。このときのタグはatomなので、アーギュメントレ
ジスタのA2にメモリの内容をMR8180とAI、U
120,140を通して代入する。この時のタグ部の内
容によるアーギュメントレジスタ150へのデータの移
動は第7図に示したようになっている。つまりメモリ1
90上のタグ部によって第8図のようにアーギュメント
レジスタ150(A−reg)をセットする。即ち、タ
グ部がatomであれば、そのときの”タグと対応する
データはその;ままアーギュメントレジスタにセットし
、変数varの時はローカルスタックLS上に設けた大
域変数のアドレスがポインタとしてアーギュメントレジ
スタのデータ部に入シ、非安定変数でちればアーギュメ
ントレジスタにundfiセットし、undf時はその
ままアーギュメントレジスタ上もundfとする。以上
のように本発明の方式で実行すると、プログラム実行結
果が第1図の状態S6から第7図に示したようになる。
つg非安定変数Xのアーギュメントレジスタ上のタグが
undfに変更されて、この変数用の別エリアをメモリ
上にとらなくてもローカルスタックからこの変数を解放
できる。
〔発明の効果〕
以上の冥施例から明らかなように、本発明によれば、メ
モリ容量の削減と、処理の高速化を図かることができ、
特に自分が自分自身を呼ぶ再帰的呼び出しが多数ある場
合には大きな効果がおる。
【図面の簡単な説明】
第1図はローカルスタックの動きを説明した図、第2図
は大域変数の結合例を示す図、第3図は本発明のマシン
のハードウェアの実施例を示す図、第4図及び第5図は
本発明を実施するだめの手順を説明した図、第6図はプ
ログラム例のメモリ上での構成を示した図、8g7図は
本発明を実施したときのアーギュメントレジスタとロー
カA/ スルツクの内容例を示した図、第8図はアーギ
ュメントレジスタへのタグ及びデータの設定方法を説明
した図である。 100・・・演算回路、120,140・・・演算ユニ
ット、150・・・アーギュメントレジスタ、19o・
・・メモリ、200・・・コノトローラ。

Claims (1)

    【特許請求の範囲】
  1. 1、プロローグ言語で記述されたプログラムを格納する
    メモリと、演算ユニツトと、ユニフイケーシヨン時の呼
    び出側の引数を保持するためのアーギユメントレジスタ
    と、規則を記述した1つの文中に1回だけ現われるか或
    いは頭部及び本体の最初にだけ現れる一時変数以外の変
    数である大域変数を記憶するためのローカルスタツフと
    、コントローラとを有するとともに、該コントローラは
    、規則文の最後のゴールの実行時に、上記大域変数の内
    本体のみに現れる非安定変数でかつその値がまだ与えら
    れていないものがあれば当該非安定変数に対応するロー
    カルスタツフ上の未定義タグを上記アーギユメントレジ
    スタ上の対応位置に記入したのち上記ローカルスタツフ
    から上記非安定変数を解放するというスタツフ処理機能
    を有したことを特徴とするプロローグマシン。
JP17680084A 1984-08-27 1984-08-27 プロロ−グマシン Pending JPS6155736A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP17680084A JPS6155736A (ja) 1984-08-27 1984-08-27 プロロ−グマシン

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP17680084A JPS6155736A (ja) 1984-08-27 1984-08-27 プロロ−グマシン

Publications (1)

Publication Number Publication Date
JPS6155736A true JPS6155736A (ja) 1986-03-20

Family

ID=16020060

Family Applications (1)

Application Number Title Priority Date Filing Date
JP17680084A Pending JPS6155736A (ja) 1984-08-27 1984-08-27 プロロ−グマシン

Country Status (1)

Country Link
JP (1) JPS6155736A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62242255A (ja) * 1986-04-15 1987-10-22 Nec Corp 情報処理装置
JPS6341933A (ja) * 1986-08-08 1988-02-23 Agency Of Ind Science & Technol 推論計算機

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62242255A (ja) * 1986-04-15 1987-10-22 Nec Corp 情報処理装置
JPS6341933A (ja) * 1986-08-08 1988-02-23 Agency Of Ind Science & Technol 推論計算機
JPH065507B2 (ja) * 1986-08-08 1994-01-19 工業技術院長 推論計算機

Similar Documents

Publication Publication Date Title
Rovner Extending Modula-2 to build large, integrated systems
JPH01147627A (ja) 質問応答装置
JPS5941064A (ja) プロログ処理装置
JPS6155736A (ja) プロロ−グマシン
JPH01147628A (ja) 質問応答装置
Betz Xlisp: an object-oriented lisp
Naur The design of the GIER ALGOL compiler
JPS60540A (ja) 述語論理型言語処理装置
JPH0784797A (ja) ロードモジュールへのソースコード行番号登録方法および装置
Brand A Decision Graph Algorithm for CCP Languages.
JPH0619713B2 (ja) 論理型デ−タ処理装置
JP2922207B2 (ja) プログラム変換システム
JPH0566941A (ja) データ処理方式及び言語処理方式
JPS607539A (ja) 述語論理型言語処理装置
JPS61115138A (ja) プログラム内のリスト形式のデ−タ構造のコピ−方法
JPS61148536A (ja) 情報処理システム
JPS5949643A (ja) デ−タ処理装置
KR970011897B1 (ko) 언어해석 처리장치
von Bechtolsheim et al. Reading From and Writing To Files
JPH06175862A (ja) 電子計算機装置
JPH01147629A (ja) 質問応答装置
Blake et al. A ring processing package for use with FORTRAN or a similar high-level language
JPS61145643A (ja) 可変語長命令処理方式
JPS61161547A (ja) プロロ−グマシン
Deutsch A LISP MACHINE WITII VERY COMPACT PROGRAMS