JPS61229127A - スタツク制御方式 - Google Patents

スタツク制御方式

Info

Publication number
JPS61229127A
JPS61229127A JP7032385A JP7032385A JPS61229127A JP S61229127 A JPS61229127 A JP S61229127A JP 7032385 A JP7032385 A JP 7032385A JP 7032385 A JP7032385 A JP 7032385A JP S61229127 A JPS61229127 A JP S61229127A
Authority
JP
Japan
Prior art keywords
frame
stack
parent
call
pointer
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
JP7032385A
Other languages
English (en)
Inventor
Yasunori Kimura
康則 木村
Mitsuhiro Kishimoto
岸本 光弘
Takeshi Shinoki
剛 篠木
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP7032385A priority Critical patent/JPS61229127A/ja
Publication of JPS61229127A publication Critical patent/JPS61229127A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、プロログ(PROLOG )のようなバック
トランク処理や単一化(Unification)処理
機能をも持った言語をスタックを用いて効果的に処理す
るスタック制御方式に関するものである。
〔概要〕
単一化の際の親の環境を示すポインタと、次ゴール・フ
レームへのポインタが一致しない場合でも、フラグをデ
ータに付すことにより、効率良(処理できることを特徴
とするものである。
〔従来技術と問題点〕
プロログは、ルールの集まりである。ルール(RULE
 )は ヘッドニーボディ。
という形をしている。ヘッドは1つの述語であり、ボデ
ィは述語の列(述語、・・・、述語)である。ルールの
中にはボディのないものもあり、この場合はファクト(
Fact )とよぶこともある。各述語は、述語名(引
数、・・・、引数) という形をしている。引数は、定数又は変数または構造
体である。定数は小文字で始まる文字列、変数は大文字
で始まる文字列である。構造体は構造体毛(引数、・・
・、引数) という形をしている。
プロログの実行過程について説明する。いま、下記のよ
うなプログラムがあったと仮定する。
■ father(youko、5houji )+(
youkoの父は5houj iであるという意味)■
 father(shinya、mario)。
■ father(morio、 taira) 。
■ mother(shinya、youko) 。
■ grandfather(X、Y) ニーfath
er(X、Z)、father(Z、Y)。
(Xの祖父がYということはXの父の父がYであるとい
う意味) ■ grandfather(X、Y) ニーn+ot
her(χ+ Z) + f a ther (Z +
 Y)。
プログラムに対して、何らかの質問をすることによって
プログラムは起動され、その質問に一致する事実がある
か否かが調べられる。この質問のことをゴールと言う。
ゴールとして ?−grandfather(X、Y)。
が与えられると、このゴールとパターンがマツチする(
 Unificationが成功するとも言う)ヘッド
を持つルールが捜される。 Unificationは
下記のようにして行われる。
ta)  ゴールの述語名とヘッドの述語名を比べる。
違っていたら失敗。
(bl  ゴールの各引数とヘッドの各引数を比べる。
(1)  引数が定数同士の時、違っていたら失敗。
(2)引数が変数と定数の時、変数の部分を定数で置き
換える。
(3)引数が変数同士の時、何時でも成功する。
(4)引数が変数と構造体の時、変数の部分を構造体で
置き換える。
(5)引数が構造体同士の時、構造体毛と構造体の各引
数を比較する。一つでも失敗すれば失敗。
(a)と(b)が両方とも成功すれば成功であり、一つ
でも失敗すれば失敗である。上述の例では、最初に■の
ルールが見つかる。ルールにボディがあれば、ボディの
各述語を左から順番に新たにゴール(ヘッドとUnif
icationが成功したゴールからみるとサブゴール
と呼ばれる)としてLlnificationが成功す
るヘッドを持つルールが捜される。そしてファクトにU
nificationが成功する迄、これが繰り返され
る。上述の例では、■の最初のサブゴールであるfat
her(X、Y)にマツチするルールが捜され、■のフ
ァクトが見つかる。そうすると、Xがyouko、Zが
5houj iに置き換わり、次に■の2番目のサブゴ
ールであるfather(shouji、Y)にマツチ
するルールが捜されるが、このようなルールは存在しな
いので、最初のサブゴールをもう一度捜し直す。
これをバックトラックと言う。バックトラックを行うと
、■のファクトが見つかる。そうすると、Xが5hin
yaSZがmarioに置き換わり、次に■の2番目の
サフ゛ゴールであるf a ther (mor i 
o 、 Y)にマツチするルールが捜され、■のファク
トが見つかり、Yがta i raに置き換わることに
より、ゴールの答はX=shinyaSY=taira
ということになる。
第4図はプロログ・マシンの構成の概要を示す図である
。第4図において、1は入力部、2はデータベース、3
はPROLOG実行部、4はスタックをそれぞれ示して
いる。入力部1からルールを入力し、データベース2に
格納する。また、PROLOG実行部3は、スタック4
とデータベース2を使って推論処理を行う。
第7図はプロログ・マシンの処理の概要を説明するため
のフローチャートである。最初にゴールをスタック4に
入れ、次にルールをデータベース2から取り出してスタ
ックに入れ、ゴールに適合するルールであるか否かを調
べる。成功すればデータベース2から次のルールを取り
出し、失敗すれば変数の状態を元に戻し、次のルールを
データベース2から取り出してスタック4に入れる。
いま、第5図に示すようなプロログ・プログラムがあり
、この状態の下で?−祖父(太部、  gp)、という
質問が入力されると、スタック4の状態は第6図に示す
ように遷移する。第6図において、左側の数字はフレー
ムの番号を示し、右側の数字はそのフレームがどのゴー
ルに対するフレームであるかを示すものである。例えば
、右側の2−1なる数字はフレーム2の第1番目の太部
の父は誰かというサブゴールに対するものであることを
示している。第6図(a)に示すように、最初に太部の
祖父は誰かと言うゴールがスタック4に入れられる。次
にこのゴールと同じ述語名のヘッドを持つルールがデー
タベース2の中に存在するか否かがサーチされる。この
場合には適合するルールとして最初にD5のルールが見
つかるので、ルールD5がスタック4に入れられる。こ
の時の状態は第6図(′b)に示される。そして、Xに
太部が代入される。次に父(太部、 par)、という
サブゴールに対する答えを得るために父という述語名の
ヘッドを持つルールがデータベースから取り出される。
父(太部、9夫)、というルールが取り出されたとする
と、このルールはスタック4に入れられる。
この状態は第6図(C)に示される。この父(太部。
9夫)、というルールは父(太部+ par)、という
サブゴールと単一化可能であるので、parに9夫が代
入される。次にフレーム2の中の父(9夫、 gp)、
という第2のサブゴールに対する答えを得るために、ヘ
ッドの述語名が父というルールがデータベース2から取
り出される。父(太部、9夫)、というルールが取り出
されたとすると、このルールはスタック4に格納される
。この時の状態は第6図(d)に示される。父(太部、
9夫)、というルールは父(9夫、 gp)、という第
2のサブゴールと単一化不可であるので、次に父(守夫
、平)、というルールがデータベース2から取り出され
、スタック4に入れられる。父(守夫、平)、というル
ールは父(9夫、 gp)、という第2のサブゴールと
単−北回であるので、答え「平」が出力され、次の答え
(母方の祖父)を捜す処理が行われる。次の答えを捜す
処理については省略する。
従来バンクトラック処理や単一化処理を実現するために
は、スタック上に、成る実行が失敗したときに戻る地点
のアドレスや単一化処理を行うときの親の環境を示すア
ドレス、成る実行が成功したときに次に実行すべき地点
のアドレスを格納してから実行していた。しかし、この
ような方法を採用すると、スタックの長さが長くなって
しまって、スタックへデータを格納するための時間が多
くか−り、実行速度が遅くなるという欠点があった。一
方、親の環境のスタック上のアドレスと成る実行が成功
した時に次に実行すべきプログラムが格納されているス
タック上のフレーム・アドレスとは殆どの場合に同じで
あるという点を考慮に入れて、この2つを共用すること
も考えられるが、この方法を採用すると、プロログの仕
様を完全に満たさない場合が生ずるという欠点がある。
〔発明の目的〕
本発明は、上記の考察に基づ(ものであって、通常は親
の環境へのスタック上のポインタと成る実行が終了した
時に次に実行すべきプログラムが格納されているスタッ
ク上のフレーム・アドレスを示すポインタとは共用する
が、共用してはならない場合はそれを示すタグを設けて
それを指示することにより、スタックの消費量を減らし
、且つ通常処理の場合の処理速度の低下を少な(するよ
うにしたスタック制御方式を提供することを目的として
いる。
〔目的を達成するための手段〕
そしてそのため本発明のスタック制御方式は、単一化の
際の環境を示すポインタとその単一化が成功した時に次
に実行すべきプログラムを示すポインタとを共用してい
るプロログのような単一化を行う言語を処理する処理系
において、上記2つのポインタが共用出来ない場合が生
じた時でも、このことを示すフラグをデータに付随させ
、このフラグに基づいて処理を行うことにより、両方を
共用している場合の処理速度を損なわず、かつ上記2つ
のポインタが共用できない場合の処理にも対処できるよ
うにしたことを特徴とするものである。
〔発明の実施例〕
以下、本発明を実施例を参照しつつ説明する。
第1図はスタックのフレーム構成を示す図、第2図は本
発明によるスタックの内容を示す図、第3図はCALL
を含むプログラムが実行されるときのスタックの変化を
示す図である。図において、S((i=0.1.・・・
)はスタック・アドレス、PPPは親フレーム・ポイン
タ部、ARGは引数部、Suはサクセッサ部をそれぞれ
示している。本発明をプロログにおける組込み述語″C
ALL”の実行例で説明する。第1図で81は“CAL
L”のフレームの先頭アドレス、S、はCALLの引数
の変数mXの値Q7のフレームの先頭アドレスであり、
S、はCALLの親のフレームの先頭アドレスである。
述@CALLは、その引数の値(こ\ではQ、)を再び
ゴールとして実行するというものであるが、このゴール
Q、、を解くときの環境が問題となる。こ\で通常のよ
うにインタプリタで実行してい(と、この時の環境は“
CALL”のフレームということになるが、この場合に
はそうではなくてCALLの環境、即ちCALLの親の
フレームということになる。従って、このような情報を
何等かの形でQ、、のフレームに残しておかなければな
らない。特にこのことはプロログ・マシンにおいてバン
クトラックしてこのCALLのフレームに戻った時に致
命的となる。なお、サクセッサ部SUには、実行すべき
サブゴールが記入されている。即ち、At 、A、、A
、lはそれぞれサブゴールを示しており、Atの次にA
、が実行され、A、の次にA7が実行される。最後のサ
ブゴールA、1の答えが見つかったことは単一化が成功
したことを意味している。A7が実行された後、親フレ
ームによって指示される次の処理が実行される。
第3図は組込み述語CALLを含むプログラムが実行さ
れるときのスタックの変化を示す図である。
まず、前述の例を用いて単一化の際の環境を示すポイン
タとその単一化が成功した時に次に実行すべきプログラ
ムを示すポインタを共用できない場合を示す。前述の例
でゴール?−祖父(太部、 gp)は、以下のように書
きかえても、その効果は全く同じである。
’il−1,、、(祖父、太部、 gp) 、 CAL
L(X)。
ここでオペレータ=0.は、右辺にリストを引数として
取りこのリストから祖父(太部、 gp)のような構造
体を作り出すものである。この場合には、変数Xに祖父
(太部、 gp)が代入される。次にCALLが実行さ
れるがこのときに、前述のポインタが共用比できない場
合が生じる。以下にこのゴールが実行される様子を説明
する。
第3図(a)はゴールが実行されようとしているところ
を示している。ここで親フレーム・ポインタ部PPPは
、このゴールを呼び出した親のフレームを指している。
Soは、このゴールを実行するためのスタック・フレー
ムのアドレスである。
第3図(b)は、初期ゴールのうち、最初のゴールを実
行しようとしている時のスタック・フレーム構成である
。ここでS、のスタック・フレームの親フレーム・ポイ
ンタ部PFPは、このゴールを呼んだフレームS0を指
している。またサクセッサ部Suには、この最初のゴー
ルが成功したときに次に実行すべきゴールCALL (
X)が入っている。
第3図(e)はX=、、 (祖父、太部、gp)の実行
が成功して次のゴールCALL (X)の実行に入った
ところの図である。ここで親フレーム・ポインタ部PP
PはSoを指しており、サクセフサ部Suはもう実行す
べきゴールがないので1なし”を指している。
第3図(d)は、実際にCALLの中に分岐してからの
実行途中のスタックの様子である。CALL述語は、そ
の引数をそのままゴールとして実行するものである。C
ALL述語の処理ルーチンの中ではCALL述語のフレ
ームの下に引数のフレームを作り、この引数をゴールと
して実行する。このとき親フレーム・ポインタ部PPP
の指す位置であるが、この場合の環境は、本来はSlや
S2と同様に80であるべであるが、このようにしてし
まうとその他の処理ルーチン、たとえば、トレーサ(ユ
ーザ・プログラムのデバッグのために用意されているモ
ジュール)などがうまく動かないなどという不都合が生
じる。したがって親フレーム・ポインタ部PPPのポイ
ンタの指す位置はこのままにしておいて、環境は、必要
に応じて切りかえるという方式が必要になってくる。以
下、この方式についてより一般の場合について説明する
。ここで親フレーム・ポインタPPPなどの設定は、マ
イクロプログラム化された処理系によって行われる。
そこで、親フレーム・ポインタ部PPPに以上のことを
示す目的でタグ・フィールドの1ビツトにフラグを設け
、これにより示すことにする。このフラグのオン/オフ
は、マイクロプログラム化された処理系よって行われる
ものとする。特に、この場合はCALL述語の処理ルー
チンの中で行われるものとする。第2図は本発明の親フ
レーム・ポインタ部PPPの1実施例構成を示すもので
あって、親フレーム・ポインタ部PPPはタグ・フィー
ルドを有している。第2図(′b)はQ7のフレームの
親フレーム・ポインタ部PPPの構成を示し、タグ・フ
ィールドの右側のビットは「1」とされ、アドレス・フ
ィールドにはアドレスSlが記入されている。このこと
はQ、1フレームの親環境はCALLのフレームではな
くてCALLフレームの親フレーム・ポインタ部PPP
の内容に依存することを示している。
第2図(a)はCALLのフレームの親フレーム・ポイ
ンタ部PPPの構成を示し、タグ・フィールドの右側の
ビットは「0」とされ、アドレス・フィールドにはアド
レスS、が記入されている。このことはCALLのフレ
ームの親環境は親フレームであることを示している。第
2(a)及び(b)の結果、Q、フレームの親環境は親
フレームということになる。つまり、第2図に示すよう
にタグ・フィールドの右側ビットが1かOかによってそ
れをデータと見るか、アドレスと見るかを区別するもの
である。本発明の方式を採用することにより、制御と環
境の2つのデータを別々に持つことなく共用して持つこ
とにより、効果的にプロログ・プログラムを実行するこ
とが出来る。
〔発明の効果〕
以上の説明から明らかなように、本発明によれば、スタ
ックの消費量を減少することが出来、またプロログの実
行に必須の特殊な機能も比較的に簡単なハードウェアで
実現できることから、プロログの実行を高速に行うこと
が出来るという効果が生ずる。
【図面の簡単な説明】
第1図はスタックのフレームの構成を説明する図、第2
図は本発明による親フレーム・ポインタ部の内容を説明
する図、第3図は組込み述語CALLを含むプログラム
が実行されるときのスタックの変化を示す図、第4図は
プロログ・マシンの構成の概要を示す図、第5図はプロ
ログ・プログラムの1例を示す図、第6図はスタックの
状態遷移の概要を示す図、第7図はプロログ・マシンの
処理の概要を説明するためのフローチャートである。 1・・・入力部、2・・・データベース、3・・・PR
OLOG実行部、4・・・スタック、Ss (i=0.
1.・・・)・・・スタック・アドレス、PPP・・・
親フレーム・ポインタ部、ARG・・・引数部、SU・
・・サクセッサ部。 特許出願人   富士通株式会社 代理人弁理士  京 谷 四 部 スターノア・7ドレス 第3図(c) 第4図 什 第5図

Claims (1)

    【特許請求の範囲】
  1. 単一化の際の環境を示すポインタとその単一化が成功し
    た時に次に実行すべきプログラムを示すポインタとを共
    用しているプロログのような単一化を行う言語を処理す
    る処理系において、上記2つのポインタが共用出来ない
    場合が生じた時でも、このことを示すフラグをデータに
    付随させ、このフラグに基づいて処理を行うことにより
    、両方を共用している場合の処理速度を損なわず、かつ
    上記2つのポインタが共用できない場合の処理にも対処
    できるようにしたことを特徴とするスタック制御方式。
JP7032385A 1985-04-03 1985-04-03 スタツク制御方式 Pending JPS61229127A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7032385A JPS61229127A (ja) 1985-04-03 1985-04-03 スタツク制御方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7032385A JPS61229127A (ja) 1985-04-03 1985-04-03 スタツク制御方式

Publications (1)

Publication Number Publication Date
JPS61229127A true JPS61229127A (ja) 1986-10-13

Family

ID=13428120

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7032385A Pending JPS61229127A (ja) 1985-04-03 1985-04-03 スタツク制御方式

Country Status (1)

Country Link
JP (1) JPS61229127A (ja)

Similar Documents

Publication Publication Date Title
Simon Experiments with a heuristic compiler
US20070112819A1 (en) Logic checker using semantic links
US5781905A (en) Program generating method combining data item part with database manipulation part
WO2025163792A1 (ja) 応答装置及びプログラム
Goel et al. Computer-aided processing of design specifications
Scholtz et al. Learning a new programming language: a model of the planning process
JPS63634A (ja) 並列論理型言語実行方式
JPH03129465A (ja) ガイド文表示方法
Crymble Downloading multiple records using query strings
Lecessi Use in Multithreaded Programs
JPH06175862A (ja) 電子計算機装置
JP2642787B2 (ja) 中断位置検索方式
JPH02108127A (ja) エキスパートシステムの推論制御方法
JP2751423B2 (ja) プログラムデバッグ処理方式
JPS61279938A (ja) プロログ・プログラム並列処理方式
JPS63118945A (ja) Prologプログラムの高速実行処理方式
JPH0261715A (ja) 記憶機能付きコマンドインタプリタ
Dawe et al. Prolog Syntax
JPH0572612B2 (ja)
JPS62163171A (ja) 自然言語処理デバツグ制御方式
JPH0476736A (ja) リレーショナルデータベースマシンのh/w診断方法
JPH06195249A (ja) 名称指定方法
JPH02275538A (ja) デバッグ処理方式
Puntigam Transactions on Shared Data: a coordination model
JPS60122419A (ja) 条件起動処理方式