仍然在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
但我不喜欢我手动计算方块而不是使用*:
运算符的事实,我真的不明白为什么我需要@:
连接。有人能告诉我一些关于这个问题的事吗?
答案 0 :(得分:2)
(+/*:)
和(*:+/)
不按照您的想法行事。
实际上,您的f
为Q (S x)
(x的总和的平方),而您的g
为S (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
另请注意,*: @: (+/)
与*: @: +/
不同,因为+/
不是一个动词(如*:
),而是一个复合词来自动词(+
)和副词(/
)的动词。