我正在研究自我修改规则,并想知道语义到底是什么以及它们将如何工作。这是一个相当广泛的问题,但我将使用一个特定的“我将如何做到这一点”将其变成一个更集中的问题。 (^(64) 是小写“d”的十六进制 ascii,所以找不到)
rule: ["a" "b" (insert find rule "^(64)" "c" probe rule) "d" "e"]
parse "abcde" rule
如果我运行它,我会得到(在 Rebol 和 Red 中):
["a" "b" (insert find rule "d" "c" probe rule) "c" "d" "e"]
== false
该规则似乎已经更新,并且以相当“看似安全的方式”进行了更新(如果有任何安全之类的东西)。还有更多邪恶的版本:
rule: ["a" "b" (clear rule probe rule) "d" "e"]
parse "abcde" rule
在 Rebol 和 Red 中,得到:
[]
== false
我有点困惑它是如何不崩溃的。但是假设它以某种方式被防弹,有没有办法让第一个例子工作?