--- This is prolog5.doc ---
1.module structure
モジュール構造
cpromain----cprohinp---cprodcg
| |-infix
|
|-cproexec---cprobltp---cprofunc
| |-cprosubr
|
|-cpromis----cproback
|-cprofine
2.module
モジュール
cpromain----グローバル定数・変数の定義、コマンドの受付とコマンドタイプ毎の処理
cprohinp----コマンドの入力の受付とコマンド毎の処理
cproexec----導出論理
cprosubr----導出に必要な共通処理
cprobltp----標準述語処理
cprofunc----標準関数の処理(現在サクセッサーs(0) の処理のみしかしていない)
pfuncはcprofuncのダミー代替
cpropack----語単位の分解情報から単位語の全部の展開:タイプ・位置・バイト数使用
expword ----文の語単位の分解情報
(タイプ・位置・バイト数・カッコのネスト次数と種類)
seqscan ----文の文字列やセパレータ,デリミッターの順次検出
instr ----文字列中の指定文字列の存在位置を調べる
doserrm ----DOSエラータイプに応じてメッセージを表示する
infix ----中置記法の書き替え処理(記法変換)
標準述語の個別使用に還元できない式は一時変数を生ずる(_temp99)
CPROLOGの版では一時変数の取り扱いは可能
pinfixはinfixのダミー代替
cpromis ----MISアルゴリズム3
pmisはcpromisのダミー代替
cproback----MIS矛盾点追跡アルゴリズムと循環点摘出ロジック
cprofine----MIS精密化アルゴリズム
cprogen ----MIS定型節自動生成
cprodcg ----DCG記法からprolog記法への記法変換
CPROLOGの版では実行可能
3.entry structure
main-------hinp-------hedit
(cmdin) | |-cmdproc----(many process)
| |-backtrace*
| |-refinement*
| |-sizecomp*
|-resolve----goal
| |-scanpred---getpred
| |-puretrue---chgodr
| |-bltpred----ans
| | |-query
| | |-comp-------varsub
| |
| |-unify------goalout
| | |-renvarn----renvnum
| | |-renvar0
| | |-dotnt
| | |-pickup
| | |-varsub
| |
| |-success----goalout*
| |-backtr-----goalout*
| |-gltocg
| |-cgtogl
| |-infix
| |-funcchg
| |-cpropack---expword
|
|-mis--------cptohn-----hndupck
|-fhncond
|-strueck
|-sfalseck
|-backtrace--oracle-----isatrue
| | |-asktogod
| | |-pickup*
| | |-varsub*
| | |-gltocg2
| |
| |-unify*
| |-delvarn
|
|-refinement-getaname
| |-getafcnt
| |-lookll
| |-sizecomp
| |-atomsck
| |-renvarvm
| |-mkhead
| |-subxixj----usageck
| |-subxify
| |-addbody
| |-bindbody---usageck*
|
|-clsgen-----clgen------genxj
| |-genfy
| |-clgput
|
|-lrmsort
|-cpsizeset
|-newclsbck--sizecomp*
| |-atomsck*
| |-tatomsck
|-lrmcond
4.entry spec note
cpromain
main horn clause input area get
ホーン節の入力エリア等の獲得
cmdin branch to each process by cmdtyp
cprohinp
hinp horn clause / command input
ホーン節やコマンドの入力受付
hedit horn clause input edit
ホーン節の1行単位の追加/変更/削除
cmdproc command execution
コマンド毎の各別処理
cproexec
resolve save goal・horn point to matching history
導出論理の実行部、実行の際のヒストリー保存
goal goal var X -> X・0 (rename), ans/query add
ゴールの導出前の整正
scanpred get goal・horn predicates, if predicate equal then goto unify
ゴールの最左アトムとユニファイアブルなホーン節の探索
backtr goback matching histiry & set horn matching point to old next
バックトラックの処理
unify substitute goal・horn head args with var change
ユニフィケーションの処理
success unfy success message output
ユニファイ成功時のメッセージ表示
chgodr goal term change order, term forward that contain no var
ゴールアトム相互の並び替え(未解決変数のないアトム優先)
cprobltp
bltpred when goal unmatch to all horn, call each builtin predicates
標準述語か否かの検査と引数の変数検査
ans output one answer
最初の答えのみの保存と表示
query concatenate answers
全部の答えのみの保存と表示
cut set previous all matching history to last horn clause point
ユニファイの失敗が発生した時点でバックトラックすべきレベルの
予めの設定(=カットオペレータの処理)
comp compare & compute builtin predicates
比較と演算の標準述語処理
cncomp char string or numeric compare
比較の標準述語処理用文字/数値比較
cprosubr
getpred get predicate from clause
ゴール最左アトムやホーン節頭部アトムの述語記号部分の取出
pickup pickup arg from arg list in atom
アトムの引数リストを順に抽出
varsub goal/horn term var change
項の置き換え
goalout output concatenated all goal atoms
ゴールの全アトムの表示
dotnt reform [X,Y] into [X|[Y]]
リスト記法の書き替え(,->|)
renvar0 put tag・suffix# to goal/horn var
変数の初期世代の付加
renvarn set search var tag for incr up var suffix#
変数の世代の書き替え
renvnum incr up var suffix#
変数の世代番号の更新
dotlist reform [1|[2|[3]]] into [1,2,3]
リスト記法の書き替え(|->,)
cpromis
mis MISメイン
fhncond Sfalse の実験で真を導いた偽なる仮説をホーン節メモリーから除く
strueck Strueを使った実験
sfalseck Sfalse を使った実験
cptohn Lローm(仮説) をホーン節メモリーに置く
lrmsort 仮説の精密化優先順のソート
newclbck 精密化で整正された文Bの重複・有意性チェック(閉論理式か等)
tatomsck 精密化で整正された文B同士の重複チェック(アトム順不一致時)
lrmcond 仮説メモリー中のFIN になったもの等を除きコンデンスする
cproback
oracle 未知の知識をStrueと照合するか神託に聞くかして置き換える処理
isatrue 未知の知識がStrueの中にあるか照合する
asktogod 未知の知識の真偽を神託に聞く
gltocg2 ゴール節の最新ユニファイゴール節への格納
delvarn 変数番号の除去。X・n->X,X#n->X
cprofine
refinement 精密化メイン
getaname アトム名の取り出し
getafcnt 節の各アトムの使用する関数の総数を求める
lookll 言語Lを述語名で検索する
sizecomp 仮説のサイズの計算、有意性チェック
atomsck 精密化で整正された文Bのアトム重複チェック・変数チェック
usageck 節の各アトムが言語L仕様によりUSAGEエラーでないか検査
renvarvm 節等の変数リネーム
mkhead 仮説の頭部生成
subxixj 仮説に{Xi/Xj} を施す
subxify 仮説に{Xi/fy} を施す
addbody 仮説のボディへのアトム付加
bindbody 仮説のボディへのアトム付加(多重文脈自由変換,項自由変換)
cprogen
clsgen 定型節自動生成メイン
clgen 指定された定型節の自動生成
clgput 生成仮説のLローm(仮説)への書き出し
genxj 定型節自動生成用subxixj
genfy 定型節自動生成用subxify
5.comment
arg constant
var
var prefix-tag-suffix#
prefix :input var
tag :'・'=goal,'#'=horn
suffix#:0-nn
ex) X -> X#2
substt term/arg/var
unify 1) goal old arg -> new arg
2) matching horn old arg -> new arg
3) goal top term -> matched horn body terms
bltpred 4) some builtin predicate var -> constant
dotnt [X|L]
[1,2,3,4] -> [1|[2,3,4]] ( -> [1|[2|[3|4]]] )
[1] -> [1,]->[1|[]]
[X|[Y|L]] -> [1|[2|[3,4]]]
d1 i
dotlist [1|[2|[]]] :| del
[1[2|[]]] :[?->,? (except ?=])
[1,2|[]]] :] del
[1,2[]] :[] del
[1,2] :result
|