1

我不太了解 J 如何评估 fork。就我而言,我有这个:

   v = ((*:+/)-(+/*:))

一个简单的代码(但错误),我试图做一个列表的方差:

   v i.11
|domain error
|((*:+/)-(+/*:))i.11

我做错了什么?

4

1 回答 1

1

叉子本身是正确的。出了问题的是尖齿(外部动词)的表述。

在 J 中,+/ *: 10 11 12不同于(+/ *:) 10 11 12(try it)。要使平方和成为可重用的函数,您必须以某种方式将这两个部分粘合在一起。

在 J 中有几种方法可以做到这一点。最流行的包括使用@:( compose function[: ) 和使用( cap )创建一个伪分叉。

在你的情况下,你可以写:

   v =: *:@:(+/)- +/@:*:  

注意周围的括号(+/),这是必需的,因为/

或者:

   v =: ([: *: +/) - ([: +/ *:) 

注意每个尖齿周围的括号:需要隔离它们,以便将它们视为叉子(从技术上讲,正确的尖齿不需要包裹在括号中,但这样做会使整个结构更加明显和对称)

于 2013-07-09T16:35:52.377 回答