JPH0385637A - 論理型言語処理方式 - Google Patents

論理型言語処理方式

Info

Publication number
JPH0385637A
JPH0385637A JP22343689A JP22343689A JPH0385637A JP H0385637 A JPH0385637 A JP H0385637A JP 22343689 A JP22343689 A JP 22343689A JP 22343689 A JP22343689 A JP 22343689A JP H0385637 A JPH0385637 A JP H0385637A
Authority
JP
Japan
Prior art keywords
argument
arguments
registers
predicate
register
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
JP22343689A
Other languages
English (en)
Inventor
Atsushi Shin
新 淳
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP22343689A priority Critical patent/JPH0385637A/ja
Publication of JPH0385637A publication Critical patent/JPH0385637A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、プロログに代表される論理型言語の処理に関
する。
〔従来の技術〕
プロログを翻訳して実行するには、ワレンの考案したプ
ロログが抽象マシン(参考文献「アンアブストラクト 
プロログ インストラクションセットJ、D・H,ワレ
ン著、ニス・アール・アイ インタナショナル、[An
 Abstract P r o I o gInst
、ruction Set、、 D、H,War−re
n、 SRI InternaLional] 、19
g3)を用いるのが一般的になりつつある。
このワレンのプロログ抽象マシンは、 1、引数レジスタ 2、プログラムを格納するためのコード領域3、制御情
報を格納するためのローカルスタック4、プロゴルで利
用する構造体データを作成するためのグローバルスタッ
ク 5、実行に失敗した時に束縛を解除する変数のアドレス
を記録するトレイルスタック を備えており、述語を呼び出す際には、引数レジスタに
値を設定して、述語のコードに分岐する。
〔発明が解決しようとする課題〕
ところが、ワレンのプロログ抽象マシンでは、引数レジ
スタの個数レジスタの個数は固定個数であり、引数レジ
スタの個数を越えた引数を持つ述語を定義したり呼びだ
しすることができないという問題点があった。
〔課題を解決するための手段〕
本発明の論理型言語処理方式の構成は、述語呼び出しに
おける述語の引数を設定するためのN個の引数レジスタ
と、構造体データを保持するためのグローバルスタック
を備えた論理型言語の実行装置において、Nより大なる
引数個数Mを持つ述語の頭部ゴールを翻訳する場合には
、第1引数から第N−1引数に対しては前記N以下の引
数個数を持つ述語の頭部ゴールを翻訳する場合と同様に
翻訳し、第N引数から第M引数に対しては、これらの引
数を要素としてもつようなグローバルスタック上の構造
体が第N引数レジスタに渡されたものとして翻訳し、前
記Nより大なる引数個数Mを持つ述語の本体部ゴールを
翻訳する場合には、前記第1引数から前記第N−1引数
に対しては前記N以下の引数個数を持つ本体部ゴールを
翻訳する場合と同様に翻訳し、前記第N引数から前記第
M引数に対しては、これらの引数を要素として持つグロ
ーバルスタック上の構造体を作成して第N引数レジスタ
に設定するように翻訳することによって、前記引数レジ
スタの個数Nより大なる引数個数を持つ述語の定義なら
びに呼び出しを可能とすることを特徴とする。
〔作用〕
以下に、本発明の詳細な説明する。
まず、説明を簡単にするために、レジスタを2つしか持
たない論理型言語装置を考える。このような論理型言語
実行装置で「fという名前の3引数の述語」、 f (x、y、z>ニー を定義しようとしても、3つの引数レジスタを要するの
で不可能である。
従って、このような述語を定義するかわりにプログラム
を書く時に、このことを意識して上の3引数のプログラ
ムを例えば、 f (x、[y、z])ニー・・・ と書くとか、システムで自動的にこのような変換を行な
うしかない。
ところが、このようにすると、[fという名前の2引数
の述語]、 f (x、y)ニー・・・ を定義した場合に問題がおきる。つまり、本来これらの
2つの異なった引数個数の述語は、全く別の述語として
記述したのにかかわらず、同じ1つの述語として扱われ
てしまう。
本発明においては、このような問題点を解決するために
、次のような方式を用いている。
翻訳プログラムが f (x、y、z)ニー・・・ という節を認識した場合、まず第2引数と第3引数を要
素に持つグローバルスタック上の構造体が第2レジスタ
に渡されるものとして翻訳を進める。
ここでは、グローバルスタック上の構造体の1つの実現
の方式として、プロログでよく使われる構造体であるリ
ストを用いた方式を説明する。
翻訳プログラムは、引数レジスタに次のように値が渡さ
れるものとして翻訳を行ない、その結果を、「fという
名前の3引数の述語」に登録する。
このようにして生成されるコードは、実は「fという名
前の2引数を述語」か、次のような定義を持っていた場
合の f (x、[y、z] )ニー・・・ コードと全く同一であるが、本方式においては、この述
語を翻訳した結果を「fという名前の2引数の述語」に
登録するので、前述したような同し名前の異なった引数
個数の述語が同一に扱われるようなことはない。
同様に、節の本体部ゴールて次のような述語吋びだしが
あった場合、 ・・・、g (x、y、z)、・・・ 翻訳プログラムは、次のように引数レジスタを設定する
ようなコードを生成して、 最後に1gと言う名前の3引数の述語」を呼び゛出すよ
うなコードを生成する。
いまの説明では、引数レジスタの個数を越えた引数を構
造体にまとめるために、リス1へとよばれる構造体を用
いたが、本発明はこの方式に限定される訳ではなく、例
えば、リストと同様に良く用いられる複合項と呼ばれる
構造体を用いることもてきる。
例えば、先はどの例であれは、頭部ゴールのf (x、
y、z) の第2引数と第3引数をまとめて、 rcst  args (y、z) として、本体部ゴールの述語呼びだし =−、g (x、y、z>、・・・ において、第2引数、第3引数をまとめてrest  
args (y、z) とすることによって、同様の効果を達成することができ
る。なお、ここで複合項の名前としてrest  ar
gsという名前を用いたが、呼び出す側と呼び出される
側とて同じ名前を用いておきさえすれば、この名前に限
定する必要はない。
また、一般のプロログでは用いられないが、グローバル
スタック」二の連続した領域を割り当てるような構造体
を考え、これを用いることによっても同様の効果を達成
することができる。このような構造体をスタックシーケ
ンスと呼び、5equence# (Eleml、=−
Elem+ )と表記することとすると、 f (x、y、z)ニー という述語で、第2引数と第3引数をまとめて、5eq
uencel (y、z) として、本体部ゴールの述語呼びたし ・・・、g (x、y、z)、・・・ において第2引数と第3引数をまとめて5equenc
el (y、z) とすることによっても、全く同し効果を達成することが
できる。
〔実施例〕
以下、本発明の実施例を図を用いなから説明する。
第1図は本発明で使用する論理型言語実行装置の一例を
示すものであり、]1がプロセッサ、12がメモリを表
す。また、プロセッサ11は、引数を受は渡すために用
いる、複数のレジスタを保持するレジスタファイル11
1を持っており、1111はこのレジスタファイルの中
で、もっとも番−フの大きいレジスタである。また、メ
セリ丁2中には、構造体データを作成するためのグロー
バルスタック121が存在する。なお、本論理型言語実
行装置を構成するにあたって必要となる他の要素は、本
発明の説明には関係しないので、ここでは省略する。
第2図は、引数個数が引数レジスタの個数を越えた場合
に、引数レジスタの個数を越えた引数を、グローバルス
タック上のリストにまとめた一例を示す。
ここでは、2つの引数を要素に持つリストを作成した例
を示しており、レジスタ1111がグローバルスタック
上に作られるリスト21を指している。
ここで、211はリストの第1要素であり、Xという値
が格納されていることを示している。212はリストの
第2要素であり、グローバルスタック上に作られる別の
りスト22を指しており、 0 221はリスト22の第1要素であり、yという値が格
納されていることを示している。222はリスト22の
第2要素であり、リス1への終端を示す定数[]が格納
されている。
第3図は、引数個数が引数レジスタの個数を越えた場合
に、引数レジスタの個数を越えた引数を、グローバルス
タック上の複合環としてまとめた一例を示す。
ここでは、レジスタ1111はグローバルスタック上の
2つの要素を持つ複合環30を指している。31が複合
環を規定する名前、32が複合環の要素の個数であり、
2を保持している。33が複合環の第1要素であり、X
という値を保持しており、34が複合環の第2要素であ
り、yという値を保持している。
第4図は、引数個数が引数レジスタの個数を越えた場合
に、引数レジスタの個数を越えた引数をスタックシーケ
ンスとしてまとめた一例を示す。
ここでは、レジスタ1111がグローバルスタック上の
2つの要素を持つスタックシーケンス40を指している
。41がスタックシーケンスの要素の個数であり、2を
保持している。42がスタックシーケンスの第1要素で
あり、Xという値を保持しており、43がスタックシー
ケンスの第2要素でありyという値を保持している。
第5図は、引数レジスタの個数をこえた引数を持つ述語
の頭部ゴールを翻訳するアルゴリズムの一例をフローチ
ャートとして示したものである。
ここでは、引数レジスタの個数を越えた引数をリストと
してまとめる場合のアルゴリズムを示した。
翻訳プログラムは、まず51で頭部ゴールの引数個数が
引数レジスタの個数を越えているかどうかを判定し、越
えていなかったら翻訳プログラムは52に進む。52で
は各々の引数に対するコードを生成するが、このために
521で繰り返しの回数を制御する変数iを1に初期化
する。522では繰り返しの終了を判定し、もしも全て
の引数に対してコード生成が終了していなければ、52
3に進み現在のiで示される番号の引数に対するコード
生成を行ない、524でiを1加算して522に戻る。
522において全ての引数に対してコード生成が終了し
たことがわかった時点で、52の処理を終了し、コード
生成も終了する。
51において引数個数が引数レジスタの個数を越えてい
た場合、翻訳プログラムは、まず53を実行する。ここ
では、引数レジスタ個数−1番目までの引数に対するコ
ード生成を行なう。53の詳細については、52と次の
1点を除いて同じであるので、詳細な説明は省略する。
つまり、52では繰り返しの回数が引数個数であるのに
対し、53では引数レジスタの個数−1である点である
。53の処理が終了した時点で翻訳プログラムは54に
進み、引数レジスタ個数番目の引数から引数個数番目の
引数までを要素とするリストを作成し、最後に55にお
いて引数レジスタ個数番目の引数レジスタに54で作成
したリストが渡されるものとしてコード生成を行ない、
コード生成を終了する。
第6図は、引数レジスタの個数をこえた引数を 3 持つ本体部ゴールの述語を呼び出す際に、述語の引数を
設定するコードを生成するためのアルゴリズムの一例を
フローチャートとして示したものである。
ここでは、引数レジスタの個数を越えた引数をリストと
してまとめる場合のアルゴリズムを示した。
翻訳プログラムは、まず61で頭部ゴールの引数個数が
引数レジスタの個数を越えているかどうかを判定し、越
えていなかったら翻訳プログラムは62に進む。62で
は各々の引数を引数レジスタに設定するコードを生成す
るが、このために、621で繰り返しの回数を制御する
変数iを1に初期化する。622では繰り返しの終了を
判定し、もしも全ての引数に対してコード生成が終了し
ていなければ、623に進み現在のiで示される番号の
引数をi番目の引数レジスタに設定するコード生成を行
ない、624でiを1加算して622に戻る。622に
おいて全ての引数に対してコード生成が終了したことが
わかった時点で、62の 4 処理を終了し、コード生成も終了する。
61において引数個数が引数レジスタの個数を越えてい
た場合、翻訳プログラムはまず63を実行する。ここで
は、引数レジスタ個数−1番目まての引数を引数レジス
タに設定するコードを生成する。63の詳細については
、62と次の1点を除いて同しであるので詳細な説明は
省略する。つまり、62では繰り返しの回数が引数個数
であるのに対し、63では引数レジスタの個数−1であ
る点である。63の処理が終了した時点で翻訳プログラ
ムは64に、進み、引数レジスタ個数番目の引数から引
数個数番目の引数までを要素とするりストを作成し、最
後に65において引数レジスタ個数番目の引数レジスタ
に64で作成したリストを設定するコードを生成して、
コード生成を終了する。
〔発明の効果〕
以上説明したように、本発明は固定個数の引数レジスタ
を持つ論理型言語実行装置においても、引数レジスタの
個数を越えた引数個数を持つ述語を定義することを可能
とする。
【図面の簡単な説明】
第1図は、本発明で使用する論理型言語装置の一例を示
す図、第2図は、引数個数が引数レジスタの個数を越え
た場合に、引数レジスタの個数を越えた引数をグローバ
ルスタック上のリストにまとめた一例を示す図、第3図
は、引数個数が引数レジスタの個数を越えた場合に、引
数レジスタの個数を越えた引数をグローバルスタック上
の複合項としてまとめた一例を示す図、第4図は、引数
個数が引数レジスタの個数を越えた場合に、引数レジス
タの個数を越えた引数をスタックシーケンスとしてまと
めた一例を示す図、第5図は、引数レジスタの個数をこ
えた引数を持つ述語の頭部ゴールを翻訳するアルゴリズ
ムの一例をサブルーチンとして示す図、第6図は、引数
レジスタの個数をかえた引数をもつ本体部ゴールの述語
を呼び出す際に述語の引数を設定するコードを生成する
ためのアルゴリズムの一例をサブルーチンとして示す図
である。 11・・・プロセッサ、111・・・レジスタファイル
、1111・・・レジスタ、12・・・メモリ、121
・・・グローバルスタック、2122・・・リスト、2
11221・・・リスト第1要素、212,222・・
・リスト第2要素、30・・・複合項、31・・・複合
項の名前、32・・・複合項の要素個数、33・・・複
合項の第1要素、34・・・複合項の第2要素、40・
・・スタックシーケンス、41・・・スタックシーケン
スの要素個数、42・・・スタックシーケンスの第1要
素、43・・・スタックシーケンスの第2要素。

Claims (1)

    【特許請求の範囲】
  1. 述語呼び出しにおける述語の引数を設定するためのN個
    の引数レジスタと、構造体データを保持するためのグロ
    ーバルスタックを備えた論理型言語の実行装置において
    、Nより大なる引数個数Mを持つ述語の頭部ゴールを翻
    訳する場合には、第1引数から第N−1引数に対しては
    前記N以下の引数個数を持つ述語の頭部ゴールを翻訳す
    る場合と同様に翻訳し、第N引数から第M引数に対して
    は、これらの引数を要素としてもつようなグローバルス
    タック上の構造体が第N引数レジスタに渡されたものと
    して翻訳し、前記Nより大なる引数個数Mを持つ述語の
    本体部ゴールを翻訳する場合には、前記第1引数から前
    記第N−1引数に対しては前記N以下の引数個数を持つ
    本体部ゴールを翻訳する場合と同様に翻訳し、前記第N
    引数から前記第M引数に対しては、これらの引数を要素
    として持つグローバルスタック上の構造体を作成して第
    N引数レジスタに設定するように翻訳することによって
    、前記引数レジスタの個数Nより大なる引数個数を持つ
    述語の定義ならびに呼び出しを可能とすることを特徴と
    した論理型言語処理方式。
JP22343689A 1989-08-29 1989-08-29 論理型言語処理方式 Pending JPH0385637A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22343689A JPH0385637A (ja) 1989-08-29 1989-08-29 論理型言語処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22343689A JPH0385637A (ja) 1989-08-29 1989-08-29 論理型言語処理方式

Publications (1)

Publication Number Publication Date
JPH0385637A true JPH0385637A (ja) 1991-04-10

Family

ID=16798118

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22343689A Pending JPH0385637A (ja) 1989-08-29 1989-08-29 論理型言語処理方式

Country Status (1)

Country Link
JP (1) JPH0385637A (ja)

Similar Documents

Publication Publication Date Title
US6094528A (en) Method and apparatus for system building with a transactional interpreter
WO1989001203A1 (en) Mimd computer system
US6101326A (en) Method and apparatus for frame elimination for simple procedures with tail calls
JP2574985B2 (ja) ディジタルデータ処理システムとエラー処理方法
Anantharaman et al. A hardware accelerator for speech recognition algorithms
JPH0385637A (ja) 論理型言語処理方式
Zehendner A module-based assembly language with parallel processing constructs and its implementation in the ASTOR architecture
JP2585793B2 (ja) コンパイラシステム
JPH04287121A (ja) タプルスペース方式
Maekawa et al. Performance adjustment of an APL interpreter
JP3079090B2 (ja) プロセッサ及びプログラム変換装置
JP2601541B2 (ja) Fortran入出力並び処理方式
JPH0460721A (ja) オブジェクト指向言語処理方式
JPS62197832A (ja) ベクトル処理装置
JPH01136241A (ja) プログラムリンク方式
JPH0713962A (ja) コンパイラ装置
JPS62216043A (ja) 論理型言語処理装置
JPS61103245A (ja) 機械語命令体系の拡張方式
JPH0426496B2 (ja)
Fukase et al. Parallel processing and hardware support of symbols
JPH02191047A (ja) 言語処理装置
Huang et al. Handling side-effects and cuts with selective recomputation in parallel Prolog
JPH06187165A (ja) プログラムのテールコール最適化システム
JPH0658632B2 (ja) デ−タ処理装置
JPH07160496A (ja) 制御記憶切替システム