Closed kyawaway closed 7 months ago
尚,膜内に
nlmem_kill@@
kill(M, T) :- unary(T) | '$callback'('nlmem_kill', M, T).
を記述すると,正常に動作する:
{
system_ruleset.
inner@@ {s,$g[]} :- kill({v,$g[]},trash).
outer@@ {t,$g[]} :- {u,$g[]}.
nlmem_kill@@
kill(M, T) :- unary(T) | '$callback'('nlmem_kill', M, T).
}.
{{s},t. }.
状態空間:
{
system_ruleset.
inner@@ {s,$g[]} :- nlmem.kill({v,$g[]},trash).
outer@@ {t,$g[]} :- {u,$g[]}.
}.
{{s},t. }.
outer@@ {t,$g[],@r} :- {u,$g[],@r}.
と書けばマッチする。rule1@@ {{s,$p[]},$q} :- {nlmem.kill({v,$p[]},trash),$q}. // {s}を削除するルール
rule2@@ {t,$q} :- {u,$q}. // tをuに変えるルール
{{s},t}.
以下のコードで再現可能:
入れ子の膜があり,内側にnlmemに反応する要素,外側に任意のルールが反応する要素があり,どちらを先に反応させても最終的に状態が合流するような構造を書いた時,
nlmemのルール(inner)を先に反応させると,nlmemが反応した膜を内側に持つ膜がルール(outer)に反応しなくなる.
生成される状態空間:
本来は状態は合流する.