Module Corelang__.Connector
val classify_atom : (string * 'a list) -> (string * 'a list, 'a * 'a) Stdlib.Either.t
アトムをコネクタかそうでないかで分類する
val partition_atoms : (string * Corelang__.Syntax.c_link list) list -> (string * Corelang__.Syntax.c_link list) list * (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) list
アトムのリストをコネクタかシンボルアトムかで分類する
val find_fusion : (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) -> (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) option
どちらか片方でも局所リンクに繋がれているような connector だった場合は Some で包んで返す
- つまり,吸収可能なコネクタを識別する
- 必ず,最初の要素が LocalLink であるようにする
val substitute_link : ('a * 'a) -> 'a -> 'a
Z[Y/X]
- ただし,基本的に X は局所リンク(であるという前提)
- 膜を貫く自由リンクが入ってきた場合は,自由リンクになるかも
val substitute_atom : (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) -> (string * Corelang__.Syntax.c_link list) -> string * Corelang__.Syntax.c_link list
p(X_1, ..., X_m)[Y/Z] ----> p(X_1, ..., X_m)[Y/Z]
val absorb_fusion : ((string * Corelang__.Syntax.c_link list) list * (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) list list * (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) list) -> ((string * Corelang__.Syntax.c_link list) list * (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) list list * (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) list) option
吸収可能なコネクタがあった場合は吸収して,Some で包んで返す
- これは一個のコネクタに関してしか処理しない.再帰呼び出しは
whileM
とかを後で使う free_connectors
は元々のアトムのリスト中に出現したコネクタのリストを反転させたもののリストを反転させたもの
- parameter symbol_atoms
シンボルアトムのリスト
- parameter free_connectors
引数が全て自由リンクなコネクタ(substitution もできない)のリストのリスト
- parameter connectors
引数に局所リンクが残っている(かも知れない)コネクタのリスト
- returns
(シンボルアトムのリスト,引数が全て自由リンクなコネクタのリストのリスト)
- これは一個のコネクタに関してしか処理しない.再帰呼び出しは
val free_connector_of : (Corelang__.Syntax.c_link * Corelang__.Syntax.c_link) -> string * string
両方自由リンクに繋がれているコネクタを引数に取り,
FreeLink
コンストラクタを剥がす- 局所リンクが引数に来た場合はエラー
- 必ず,吸収可能なコネクタを全て吸収し終えた後に呼ぶ
val normalize : (string * Corelang__.Syntax.c_link list) list -> (string * Corelang__.Syntax.c_link list) list * (string * string) list
どちらか片方でも閉じたリンクを繋げるコネクタを吸収させる
- アトムのリストを左から舐めていって,すでに吸収可能なコネクタが存在しないことがわかったものは
absorbed_atoms
に追加してやる - コネクタの吸収は,必ず局所リンクを substitution するので 吸収可能なコネクタではなかったもの(両方とも自由リンクに接続されていたコネクタ)が, substitution によって,吸収可能になることはない
absorbed_atoms
はアトムのリストのリストになっている
- アトムのリストを左から舐めていって,すでに吸収可能なコネクタが存在しないことがわかったものは