<戻る>

--- 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