JP2752094B2 - 論理型言語におけるバックトラック処理方式 - Google Patents

論理型言語におけるバックトラック処理方式

Info

Publication number
JP2752094B2
JP2752094B2 JP63228520A JP22852088A JP2752094B2 JP 2752094 B2 JP2752094 B2 JP 2752094B2 JP 63228520 A JP63228520 A JP 63228520A JP 22852088 A JP22852088 A JP 22852088A JP 2752094 B2 JP2752094 B2 JP 2752094B2
Authority
JP
Japan
Prior art keywords
predicate
execution
executed
processing method
instruction
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.)
Expired - Lifetime
Application number
JP63228520A
Other languages
English (en)
Other versions
JPH0277841A (ja
Inventor
利夫 岡本
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP63228520A priority Critical patent/JP2752094B2/ja
Priority to US07/406,417 priority patent/US5136698A/en
Priority to EP19890117025 priority patent/EP0359254A3/en
Publication of JPH0277841A publication Critical patent/JPH0277841A/ja
Application granted granted Critical
Publication of JP2752094B2 publication Critical patent/JP2752094B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/313Logic programming, e.g. PROLOG programming language
    • G06F8/3135Unification or backtracking

Description

【発明の詳細な説明】 [発明の目的] (産業上の利用分野) 本発明は、論理型言語におけるバックトラック処理方
式に関し、詳しくは、PROLOG言語等のような論理型言語
で書かれたプログラムの実行中において実施されるバッ
クトラック処理に関する。
(従来の技術) PROLOG言語のような論理型言語においては述語の実行
が失敗した時にはバックトラックという処理が行われ、
代替述語の処理が行われる。更に具体的に、例えば第2
図(a)に示すようなPROLOGで書かれたプログラムを例
にとって説明する。同図において、述語aを実行する
と、第1のクローズa:−b,!,c,d.をまず実行するが、こ
こでこの実行に失敗すると、代替のクローズであるa:−
e,f.を実行する。この代替のクローズを実行する時に
は、前記第1のクローズを実行しようとしていた時の状
態に各種のデータをもとに戻さなくてはならない。これ
ら一連の処理をバックトラック処理と称する。
ところで、プログラム作成者がバックトラックの制御
を明示的に指示して細かい制御を行いたいため、各種の
オペレータが言語仕様の中で提供されている。PROLOG言
語では、カットオペレータがその代表である。
このカットオペレータがある場合について、第2図の
同じプログラム例で説明する。第1のクローズの実行中
に、述語bが成功して、「!」で示すカットオペレータ
を次に実行すると、述語aに関してバックトラック処理
により代替クローズを実行できないようにする。従っ
て、述語bの実行が失敗してバックトラック処理が発生
すると、まだカットオペレータを実行していないため、
述語aの第2のクローズを実行するが、述語cの実行中
にバックトラック処理が発生し、述語cの代替クローズ
がなければ述語aの代替クローズを実行することなく、
述語aが失敗したことになり、述語aを呼び出している
更に上位の述語に対してバックトラック処理を行うこと
になる。
このようなPROLOGのプログラムを実行するには、例え
ばチョイスポイントと呼ばれるデータ構造をスタック中
に作成し、それに従ってバックトラック処理を行ってい
る。
(発明が解決しようとする課題) 上述した従来のバックトラック処理は、画一的であ
り、プログラムの言語仕様においてバックトラック処理
を明示的に記述する方法に制限があり、複数方式のバッ
クトラック処理を動的に切り換えて使用することができ
ず、柔軟なプログラミングを妨げる問題があった。その
ため、このような処理を実現するには、プログラム記述
の方で工夫するしかなく、そのプログラムの記述が複雑
になり、デバッグが困難になり、また実行時間が多くか
かるという問題がある。
本発明は、上記に鑑みてなされたもので、その目的と
するところは、言語仕様を拡張し、プログラミングし易
くした論理型言語におけるバックトラック処理方式を提
供することにある。
[発明の構成] (課題を解決するための手段) 上記目的を達成するため、本発明の論理型言語におけ
るバックトラック処理方式は、論理型言語で書かれたプ
ログラムの実行中におけるバックトラック処理方式であ
って、論理型言語において実行する述語毎に該述語を実
行しようとするときの状態を記憶し、該述語の代替述語
の実行を可能とするためのチョイスポイントを生成する
手段と、該チョイスポイントを述語の実行順に順次リン
クさせるリンク手段と、前記チョイスポイント毎に設け
られ、チョイスポイントの有効性を示すフラグ情報を設
定するフラグ手段と、実行中の述語の実行に失敗した場
合、前記フラグ情報により有効を示された前記チョイス
ポイントを、前記リンク手段を用いて探索する探索手段
とを有することを特徴としている。
また、本願第2の発明は、前記フラグ手段に設定され
たフラグ情報を変更する命令を有することを特徴として
いる。
(作用) 本発明の論理型言語におけるバックトラック処理方式
では、チョイスポイントの有効性を示すフラグ情報を各
チョイスポイント毎に設定し、述語の実行に失敗した場
合、前記フラグ情報により有効を示された前記チョイス
ポイントを、リンク手段を用いて探索している。
(実施例) 以下、図面を用いて本発明の実施例を説明する。
第1図は本発明の一実施例に係わる論理型言語におけ
るバックトラック処理方式を説明するレジスタおよびメ
モリマップを示す図である。同図において、メモリマッ
プは、コード、ヒープ、スタック、トレイル、プッシュ
ダウンからなる5つのエリアに区切られている。コード
はプログラムコードを格納するエリアであり、ヒープは
グローバルデータを格納するエリアであり、スタックは
ローカルデータおよび実行途中のレジスタの値を格納し
ておくエリアであり、トレイルはユニファイの状態を保
持しておくエリアであり、プッシュダウンはその他一時
的なデータ処理に利用するエリアである。なお、同図に
エリアにおいて示す矢印はエリアが矢印の方向に延びて
いくことを示している。また、レジスタは上記のエリア
を制御するもの(図中でで示す部分)、述語の引数の
値を示しているもの、および一時的に利用するもの(図
中でで示す部分)等がある。
また、論理型言語としては、PROLOG言語を例として使
用し、前記各レジスタおよびメモリマップは文献(Warr
en,D.H.D.,“An Abstract Prolog Instruction Set",Te
ch.Note 309,Artificial Intelligence Center,SRI Int
ernational,Oct.1983)(以下、WAMと略称する)に説明
されているマシンの命令体系で動作するものとする。な
お、この文献で触れられていないカットオペレータに対
する処理のために命令を拡張している。
次に、本方式によるバックトラック処理をカットオペ
レータの処理に対応して詳しく説明する。
第2図は本実施例の動作を説明するためのPROLOG言語
で書かれたソースプログラムとこのソースプログラムを
コンパイルしてWAM命令に変換したものであり、第2図
(a)は通常のPROLOGの言語仕様にあるカットオペレー
タを使用したものであり、第2図(b)は新しいカット
オペレータを使用したものである。
第2図(a)のプログラムの実行を開始して、述語a
を実行する時には、第1図のメモリマップ中のスタック
エリアは第3図(a)に示すようになっている。すなわ
ち、この時点のエンバイロメント(以下、Envと略称す
る)およびチョイスポイント(以下、C.P.と略称する)
はそれぞれレジスタEおよびレジスタBで指されてお
り、またスタックのトップはレジスタAで管理されてい
る。
エンバイロメントとチョイスポイントはそれぞれ第4
図に示すように構成されている。エンバイロメントはあ
る述語を実行中に必要となるパーマネント変数の値を保
持するため、直前のエンバイロメントをリンクするため
のポインタおよび一部のレジスタの値をセーブしておく
ために使用される。また、チョイスポイントは述語の実
行が失敗(フェイル)して、代替の述語を実行するため
の必要なデータ、すなわち、代替述語が格納されている
コードエリアの先頭アドレス(レジスタL)、その代替
述語を実行するときの引数の値(レジスタA1,レジスタA
2),……)等を保持するとともに、該C.P.が有効であ
るか否かを示すフラグを有する。また更に、直前のチョ
イスポイントをリンクするためのポインタや一部のレジ
スタの値を保持している。これらのエンバイロメント,
チョイスポイントは述語の実行中、動的に生成消滅す
る。
また、第3図において、チョイスポイントC.P.は実線
の囲みで示し、エンバイロメントEnvは点線の囲みで示
し、後述するmark−cut 1命令でスタックに積んだC.P.
のポインタは二重線の囲みで示してある。また、以下の
説明に必要な範囲で各データ構造中の中に格納されるポ
インタは矢印で表示している。
第2図(a)ので示す「try−me−else L3」命令を
実行すると、新しいチョイスポイントC.P.−1が作成さ
れ、第3図(b)に示すようになる。すなわち、C.P.中
のレジスタBをセーブするエリアに、それまでレジスタ
Bによって示されていたC.P.−0が入り、図の矢印で示
すようなリンクが形成される。また、該チョイスポイン
トC.P.−1のフラグは「○」印で示すように初期値であ
る有効状態にセットされている。
次に、第2図(a)ので示す「mark−cut 1」命令
を実行する。これは以降に出てくる「cut」命令、「scu
t」命令に対応して行われるものである。この命令は、
現在のC.P.の先頭アドレスおよびその1つ前のC.P.の先
頭アドレスを求め、これをスタックに積む。よって、第
3図(c)に示すようなリンクが形成される。
次に、第2図(a)ので示す「allocate」命令を実
行すると、第3図(d)に示すようにエンバイロメント
Env−1がスタックトップに新規に生成される。
また、次に、第2図(a)ので示す「call」命令を
実行し、述語bの実行に移る。そして、述語bの実行が
成功すると、次に第2図(a)ので示す「cut」命令
を実行する。その間に複数のC.P.が作成される可能性が
あるため、で示す「cut」命令を実行するときには、
レジスタBの値はチョイスポイントC.P.−1を指してい
るとは限らない。レジスタEはエンバイロメントEnv−
1を指している(第5図(a)参照)。
「cut」命令を実行すると、レジスタEの値をよりど
ころにして「mark−cut 1」命令でスタック中に作成し
たポインタの値の2つのうち図の下側の値を利用し、第
5図(b)に示すように、その値にレジスタBを再セッ
トする。従って、次の命令である第2図(a)のに示
す「call」命令で述語cの実行が失敗すると、第5図の
C.P.−0に従ってバックトラック処理を行い、第5図
(c)に示すようにC.P.−1が消滅し、以降の述語aの
続行は不可能となる。従って、述語aの代替述語を実行
することなく述語aは失敗したことになり、カットオペ
レータの処理が実行できたことになる。
次に、第2図(b)を参照して特別なカットオペレー
タを実行した時の処理を説明する。第2図(b)に示す
例題プログラムは、第2図(a)における記号「!」で
示す従来のカットオペレータの代わりに、記号「$」で
示す新しいカットオペレータを使用する。コンパイルし
た結果のアセンブラソースは第2図(b)に示すとおり
であり、従来の「cut」命令が「scut(special cut)」
命令に替わっただけである。従って、第2図(b)の
からで示す命令は同じであり、その実行も第2図
(a)のそれと同じである。
従って、次に、第2図(b)ので示す「scut」命令
の動作を説明する。この「scut」命令を実行すると、レ
ジスタEの値をよりどころにして「mark−cut 1」命令
でスタックにセーブしたポインタの2つの値のうち第6
図(a)に示すように図の上側の値を利用し、その値が
指しているチョイスポイントC.P.−1中のフラグの値を
第6図(b)において「X」で示すように無効にする。
従って、この後のバックトラック処理では、レジスタB
に指されているC.P.中のフラグが有効ならば、第6図
(c)に示すように通常のバックトラック処理と変わら
ない。しかしながら、この時、レジスタBに指されてい
るC.P.中のフラグの値が第7図(a)に示すように無効
であれば特別な処理になる。すなわち、無効フラグがた
っていると、その1つ前のC.P.、すなわち第7図(b)
に示すようにC.P.−0の先頭にレジスタBを再セット
し、そのC.P.の内容に従ってバックトラック処理を行
う。もし、このC.P.−0のフラグも無効なら、その更に
1つ前のC.P.に対して同様の処理を行う。
従って、特別なカットオペレータの後で実行する述語
cが失敗すると、今度は述語bの代替述語を実行し、そ
れも失敗すると、述語aの代替述語(a:−e,f.)を実行
することなく述後aの失敗となるのである。
なお、上述した実施例では、バックトラックを制御す
るフラグを1つだけ設け、このフラグの値により2種類
のバックトラック制御を実現しているが、このフラグを
拡張して、例えばフラグの値にある数字、例えばnをセ
ットし、これにより例えば連続するn個のC.P.を無効に
するということを可能にするようなことも可能となり、
更に柔軟なバックトラック処理が可能となり、言語仕様
の拡張が可能になる。
[発明の効果] 以上説明したように、本発明によれば、チョイスポイ
ントの有効性を示すフラグ情報を各チョイスポイント毎
に設定し、述語の実行に失敗した場合、前記フラグ情報
により有効を示された前記チョイスポイントを、リンク
手段を用いて探索しているので、論理型言語で必要なバ
ックトラック処理を複数の方式で動的に切り換えながら
実行することが可能となり、例えばPROLOG言語において
言語の仕様を拡張し、より柔軟なプログラミングが可能
となり、かつ高速に実行できるとともに、例えばATN(A
ngmented Transition Network)文法で記述した機械翻
訳用のパーザのルール等も容易に実行することができ
る。
【図面の簡単な説明】
第1図は本発明の一実施例に係わる論理型言語における
バックトラック処理方式を説明するレジスタおよびメモ
リマップを示す図、第2図は第1図の実施例における動
作を説明するためのPROLOG言語で記述されたプログラム
例およびそのコンパイルしたアセンブラソースを示す
図、第3図は第2図のプログラム例におけるスタックの
動きを示す説明図、第4図はスタック中に動的に利用さ
れるエンバイロメントおよびチョイスポイントの各デー
タの構造を示す図、第5図はカットオペレータを実行中
のスタックの動きを示す説明図、第6図は特別なカット
オペレータを実行中のスタックの動きを示す説明図、第
7図は特別なカットオペレータを実行したことによりチ
ョイスポイントの中のフラグの値が無効になった場合の
バックトラック処理の説明図である。

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】論理型言語で書かれたプログラムの実行中
    におけるバックトラック処理方式であって、論理型言語
    において実行する述語毎に該述語を実行しようとすると
    きの状態を記憶し、該述語の代替述語の実行を可能とす
    るためのチョイスポイントを生成する手段と、該チョイ
    スポイントを述語の実行順に順次リンクさせるリンク手
    段と、前記チョイスポイント毎に設けられ、チョイスポ
    イントの有効性を示すフラグ情報を設定するフラグ手段
    と、実行中の述語の実行に失敗した場合、前記フラグ情
    報により有効を示された前記チョイスポイントを、前記
    リンク手段を用いて探索する探索手段とを有することを
    特徴とする論理型言語におけるバックトラック処理方
    式。
  2. 【請求項2】前記フラグ手段に設定されたフラグ情報を
    変更する命令を有することを特徴とする請求項1記載の
    論理型言語におけるバックトラック処理方式。
JP63228520A 1988-09-14 1988-09-14 論理型言語におけるバックトラック処理方式 Expired - Lifetime JP2752094B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP63228520A JP2752094B2 (ja) 1988-09-14 1988-09-14 論理型言語におけるバックトラック処理方式
US07/406,417 US5136698A (en) 1988-09-14 1989-09-13 Method for selective back-tracking in a hierarchical system containing a flag which indicates the validity of a choice-point
EP19890117025 EP0359254A3 (en) 1988-09-14 1989-09-14 Method of back-tracking in computer processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP63228520A JP2752094B2 (ja) 1988-09-14 1988-09-14 論理型言語におけるバックトラック処理方式

Publications (2)

Publication Number Publication Date
JPH0277841A JPH0277841A (ja) 1990-03-16
JP2752094B2 true JP2752094B2 (ja) 1998-05-18

Family

ID=16877711

Family Applications (1)

Application Number Title Priority Date Filing Date
JP63228520A Expired - Lifetime JP2752094B2 (ja) 1988-09-14 1988-09-14 論理型言語におけるバックトラック処理方式

Country Status (3)

Country Link
US (1) US5136698A (ja)
EP (1) EP0359254A3 (ja)
JP (1) JP2752094B2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0549924A1 (en) * 1992-01-03 1993-07-07 International Business Machines Corporation Asynchronous co-processor data mover method and means
US5532928A (en) * 1992-11-25 1996-07-02 Recra Environmental, Inc. Computer system and method for waste accounting, reduction, and evaluation
US5377337A (en) * 1993-06-08 1994-12-27 International Business Machines Corporation Method and means for enabling virtual addressing control by software users over a hardware page transfer control entity
JP3154679B2 (ja) * 1996-10-18 2001-04-09 三菱電機株式会社 連接符号の誤り訂正復号装置及び復号方法
US6272390B1 (en) 1997-09-09 2001-08-07 Beologic A/S Method for interactive configuration and computer readable medium encoded with a program for performing said method
US6223170B1 (en) 1997-09-09 2001-04-24 Baan Development B.V. Method and apparatus for inference of partial knowledge in interactive configuration
US6157922A (en) * 1997-10-24 2000-12-05 Trilogy Development Group, Inc. Method and apparatus for transparent backtracking
US8000952B2 (en) * 2006-03-09 2011-08-16 International Business Machines Corporation Method and system for generating multiple path application simulations
US8104022B2 (en) 2006-11-06 2012-01-24 International Business Machines Corporation Automated method for historical analysis of a memory state
US10452415B2 (en) 2014-09-25 2019-10-22 International Business Machines Corporation Abstraction of backtracking

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5016164A (en) * 1986-04-21 1991-05-14 Texas Instruments Incorporated Computer system having delayed save on procedure calls
ATE51721T1 (de) * 1986-07-08 1990-04-15 Europ Computer Ind Res Verfahren und system zur verarbeitung von logischen programmen.

Also Published As

Publication number Publication date
EP0359254A2 (en) 1990-03-21
US5136698A (en) 1992-08-04
EP0359254A3 (en) 1990-11-14
JPH0277841A (ja) 1990-03-16

Similar Documents

Publication Publication Date Title
US5359730A (en) Method of operating a data processing system having a dynamic software update facility
US4410940A (en) Transfer of control method and means among hierarchical cooperating sequential processes
JP2752094B2 (ja) 論理型言語におけるバックトラック処理方式
US7062753B1 (en) Method and apparatus for automated software unit testing
Carver et al. Deterministic execution testing of concurrent Ada programs
US5388263A (en) Procedure state descriptor system for digital data processors
JPH0581069A (ja) プログラムのデバツグ方法
JPH0877021A (ja) 割込処理装置および方法
JPH0258129A (ja) 論理型プログラム処理方式
JPS6227822A (ja) バツクトラツク制御方式
JPS62293434A (ja) 分岐先予測制御方式
JPH03132824A (ja) 論理型プログラム処理方式
Cater et al. An ASM dynamic semantics for standard ML
JPS62254237A (ja) インタプリタ方式の分岐命令実行方式
JPS63106047A (ja) 動的サブル−チン呼び出し方式
JPH0695868A (ja) ソフトウェア管理方式
JPH0675757A (ja) 仮想空間常駐プログラムのリンク方式
JPS6249546A (ja) 論理型言語処理装置
JPS62137641A (ja) 高級言語のコンパイラ
JPH04357527A (ja) 並列論理型言語の処理方法
JPH0566949A (ja) 関数定義コンパイルドコード呼出し方式
JPS61139840A (ja) 情報処理装置
JPH01258029A (ja) データ処理装置
JPH0658632B2 (ja) デ−タ処理装置
JPH0544687B2 (ja)