如果您给Base(#.^:_1)的逆列表作为左参数,它将产生与Antibase(#:)相同的结果:
24 60 (#.^:_1) 123456
17 36
24 60 (#:) 123456
17 36
Run Code Online (Sandbox Code Playgroud)
如果您给Antibase(#:)一个左参数,它将复制Residue(|),而不是Base(#.^:_1)的反数:
8 #: 1234
2
8 | 1234
2
8 (#.^:_1) 1234
2 3 2 2
Run Code Online (Sandbox Code Playgroud)
在什么情况下,Antibase的行为会优于反向的Base?您为什么不只在那些地方使用残渣呢?我觉得我一定缺少有关Antibase行为实用程序的明显信息。
首先,《 J词典》定义#.^:_1了等同于#:,因此它们(大部分)是可互换的也就不足为奇了。特别是,对于词汇页#:说:
r&#:与r&#相反。”
在实践中也支持这种理论上的对等。如果使用超酷副词向J的实现要求其定义,您将得到:#.^:_1b.
24 60 60&#. b._1
24 60 60&#:
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以看到所有#.^:_1操作都遵循#:。它们的定义是等效的,现在我们可以看到#.^:_1- 至少在非标量LHA¹的情况下 -只是将其参数传递给#:。
那么,我们如何解释您观察到的差异?事实证明,即使在纯粹的J语言中,理论也与实践不同。有二元体系之间的矛盾#:和#.^:_1和,至少在标左参数的情况下,后者的行为是优于前者。
我会(并且已经)认为这种差异是一个错误:上面引用的《词典》指出两个二元是等价的,但是当(即标量)断言是错误的。就拿例如:不成立。也就是说,如果Dictionary的断言(上面引用)为true,则该语句应返回(true),但实际上返回(false)。0-:#$rrr=.2(r&#: -: r&#.^:_1) 1 2 310
但是,正如您所指出的,这是一个有用的错误。这就是说:我希望将的定义#:更改为match #.^:_1,而不是相反。但这是唯一的时间#.^:_1比方便#:。在所有其他情况下,它们是等效的,并且由于#:是原始的并且#.^:_1是带有尾随的复合短语_1,因此前者更加方便。
例如,当您的右手参数是数字文字时,很容易不经意地将其附加到_1in #.^:_1,如in 2 2 2 2 #.^:_1 15 7 4 5,这将引发错误(因为_1 15 7 4 5被词法化为单个单词,因此作为一个整体使用,作为的参数^:。有多种解决方法,但是没有一种方法比使用方便或简单#:。
您可以反驳说,在大多数情况下,LHA将是一个标量。这是一个经验性的参数,每个代码库都会有所不同,但是我个人看到很多情况,例如24 60 60 #: ...,我试图将时间戳分解为持续时间段(小时,分钟,秒),或者(8#2)#: ...尝试将字节分解为正好为 8位的向量(例如与相比,8 #.^:_1 ...将字节分成多少个字节,无论是8还是3或17¹)。而且我会进一步争辩说,在J社区中,这些都是常用且可立即识别的习惯用语,因此使用#:辅助工具可以使您保持清晰和团队沟通。
但是,尽管如此,最终#:还是#.^:_1将bug 定义为等效的,因此您使用的bug 确实是一个问题。(然后#.^:_1问,为什么要定义所有东西?恩,这是一个完整的“另类故事”。)
¹PS:想看到很棒的东西吗?如何#.^:_1实现标量LHA的魔力?让我们问J!
2&#. b._1
($&2@>:@(2&(<.@^.))@(1&>.)@(>./)@:|@, #: ]) :.(2&#.)
Run Code Online (Sandbox Code Playgroud)
首先,请注意(到目前为止)完全不奇怪的使用#:。所有#.^:_1正在做的是为计算适当的LHA #:。
其次,该短语$&2@>:@(2&(<.@^.))@(1&>.)@(>./)@:|@,向您显示J如何计算表示基数(或基数)y中的y(的最大值)所需的位数。它本身就是一个有用的短语,以至于我在个人实用程序库中保留了它的一个版本:
ndr =: 10&$: :(>:@<.@^. (1 >. >./@:|@,))
ndr 1 10 100 101 NB. Number Digits Required in [default] base 10
3
16 ndr 1 10 100 101 NB. Number Digits Required in hexadecimal
2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |