总和的平方减去J中的正方形的总和(或如何乘坐火车?)

时间:2013-03-01 14:48:33

标签: j

仍然在J的学习过程中...要解决的问题现在是express the square of the sum minus the sum of the squares of natural integers

天真的解决方案是

(*:+/>:i.100) - (+/*:>:i.100)

现在,我想使用fork只能编写一次列表>:i.100。我的叉子应该:

  h
/   \
f   g
|   |
x   x

其中f是总和的平方,g是平方和,h是负数。所以,天真的,我写道:

((*:+/) - (+/*:)) >:i.100

但它给了我一个域错误。为什么?我也尝试过:

(+/ (*: - +/) :*) >: i.100

而这一次,它给了我一长串的数字......我想这与@连词有关,但我仍然不知道At有什么...继续我的任务,我终于得到了

((+/*+/) - +/@:*:) >:i.100

但我不喜欢我手动计算方块而不是使用*:运算符的事实,我真的不明白为什么我需要@:连接。有人能告诉我一些关于这个问题的事吗?

1 个答案:

答案 0 :(得分:2)

(+/*:)(*:+/)不按照您的想法行事。

实际上,您的fQ (S x)(x的总和的平方),而您的gS (Q x)(x的平方和)。您can see对于任何f,g f (g y) = (f @: g) y

所以,你可以写

(Q (S x)) h (S (Q x))

作为

((Q @: S) x) h ((S @: Q) X)

现在等同于

(f x) h (g x)

(f h g) x

因此,

((*: @: (+/)) - (+/ @: *:)) >: i.1000

另请注意,*: @: (+/)*: @: +/不同,因为+/不是一个动词(如*:),而是一个复合词来自动词(+)和副词(/)的动词。