【发布时间】:2015-04-01 19:48:07
【问题描述】:
我正在研究自我修改规则,并想知道语义到底是什么以及它们将如何工作。这是一个相当广泛的问题,但我将使用一个具体的“我将如何做到这一点”将其变成一个更集中的问题。 (^(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
我有点困惑它是如何不崩溃的。但是假设它以某种方式被防弹,有没有办法让第一个例子工作?
【问题讨论】:
-
跳过插入的字符怎么样?规则:[“a”“b”(插入查找规则“d”“c”探测规则)跳过“d”“e”];返回true