Map SELECT和<;=和>;=运算符,返回垃圾或无

Map SELECT和<;=和>;=运算符,返回垃圾或无,map,rebol,Map,Rebol,我正试图在Rebol 2中绘制一张操作符到其相反方向的地图,例如: op-map: [ >= [<] <= [>] ] 这在REBOL3中正常工作。是虫子吗?如何解决这个问题?似乎是REBOL2解析逻辑中的一个错误。它看到第一个。请注意: >> length? op-map == 2 >> op-map/2/1 == <] <= [> >> type? op-map/2/1 == tag!

我正试图在Rebol 2中绘制一张操作符到其相反方向的地图,例如:

op-map: [
    >= [<]
    <= [>]
]

这在REBOL3中正常工作。是虫子吗?如何解决这个问题?

似乎是REBOL2解析逻辑中的一个错误。它看到第一个
。请注意:

>> length? op-map
== 2

>> op-map/2/1
== <]
    <= [>

>> type? op-map/2/1
== tag!
>长度?操作图
== 2
>>op map/2/1
==>类型?op map/2/1
==标签!
因此,在Rebol的脑海中,这类似于如果你写了更多的东西:

op-map: [
    >= [<a href="http://hostilefork.com">]
]
op映射:[
>= []
]
不仅仅是布洛克!这就是问题所在,帕伦就是这样!也是:

>> op-map: first [(>= (<) <= (>))]
== (>= (<) <= (>))

>> length? op-map
== 2
>操作图:第一个[(>=(=(=)长度?操作图
== 2
我不完全确定Rebol 3中的规则是什么。它不允许在标记中使用括号:

>> print <[o]>
== <[o]>
>打印
== 
…但不能在源代码中使用不匹配的右大括号,而允许使用右大括号:

>> print <]>
** Syntax error: missing "[" at "end-of-block"
** Near: (line 1) print <]>

>> print <[>
<[>
>打印
**语法错误:“块末尾”缺少“[”
**近:(第1行)打印
>>印刷品
…但当它们位于引号内时,可以使用不匹配的结束符:

>> print <"]">
<"]">
>打印
更奇怪的是,您可以通过编程方式创建仅包含不匹配的闭大括号的标记:

>> print to-tag "]"
<]>
>打印到标签“]”
因此,虽然在给定的情况下,它看起来有更好的行为,但很难说是否真的有“修复”方面的形式化逻辑。新规则可能有类似但更微妙的问题。同时,为了安全起见,在Rebol 2中处理这些运算符时,您可以尝试从字符串创建它们:

op-map: compose/deep [
    (to-word ">=") [(to-word "<")]
    (to-word "<=") [(to-word ">")]
]
op映射:合成/深度[
(to word“>=”[(to word“使用
在words中添加空格是特殊情况,因为标签中有双重用途(如您所建议的)。与常规用法(如
3<4
)一样,在
之后添加空格将防止解析器将其与标签混淆,并将其视为单词:/p 预编码映射:[ >= [< ] ] ]
Hmmm…好吧,但这不是很自我记录。如果你没有留下严厉的评论,肯定会有人进去删除-(希望这将以一种更统一的方式得到纠正!好吧,正如你所说的,它在R3中正确工作,因此已被纠正到一定程度。除非有2.7.9。。。
>> print to-tag "]"
<]>
op-map: compose/deep [
    (to-word ">=") [(to-word "<")]
    (to-word "<=") [(to-word ">")]
]
op-map: [
    >= [< ]
    <= [>]
]