我不太了解 J 如何评估 fork。就我而言,我有这个:
v = ((*:+/)-(+/*:))
一个简单的代码(但错误),我试图做一个列表的方差:
v i.11
|domain error
|((*:+/)-(+/*:))i.11
我做错了什么?
我不太了解 J 如何评估 fork。就我而言,我有这个:
v = ((*:+/)-(+/*:))
一个简单的代码(但错误),我试图做一个列表的方差:
v i.11
|domain error
|((*:+/)-(+/*:))i.11
我做错了什么?
叉子本身是正确的。出了问题的是尖齿(外部动词)的表述。
在 J 中,+/ *: 10 11 12
不同于(+/ *:) 10 11 12
(try it)。要使平方和成为可重用的函数,您必须以某种方式将这两个部分粘合在一起。
在 J 中有几种方法可以做到这一点。最流行的包括使用@:
( compose function[:
) 和使用( cap )创建一个伪分叉。
在你的情况下,你可以写:
v =: *:@:(+/)- +/@:*:
注意周围的括号(+/)
,这是必需的,因为/
或者:
v =: ([: *: +/) - ([: +/ *:)
注意每个尖齿周围的括号:需要隔离它们,以便将它们视为叉子(从技术上讲,正确的尖齿不需要包裹在括号中,但这样做会使整个结构更加明显和对称)