作为初学者练习,我尝试sum(1/(1+0.03)^n for n = 1 to 30
使用J 计算以下总和+/%(1 + 0.03)^ >:i.30
。我怎样才能把它写成一个简单的默认形式?我所尝试的一切都比上面的显式形式丑得多>:@[ (+/&:%)@:^ >:&i.@]
问问题
190 次
2 回答
3
你可以从
+/@:%@((1 + 0.03) ^ >:@i.) 30
您可以使用 fork 将 0.03 设为 left 参数,但使用 hook 会更简洁
(1 + 0.03) +/@:%@([ ^ >:@i.@]) 30 NB. use fork
(1 + 0.03) +/@:%@(^ >:@i.) 30 NB. use hook
对 的左右参数执行相同的操作(增量)^
。这暗示&
(Compose)可能有用。
0.03 +/@:%@(^&>: i.) 30 NB. apply increment to both left & right arg
于 2013-02-22T21:41:58.277 回答
1
当我想要一个默契的功能时,我经常让13 :
我为我服务。在这种情况下,一些变化:
13 : '+/ %((1+0.03)^1+i.y)'
[: +/ [: % 1.03 ^ 1 + i.
13 : '+/ %((1+0.03)^>:i.y)'
[: +/ [: % 1.03 ^ [: >: i.
并以1+0.03
或其他任何方式作为左参数:
13 : '+/ %(x^1+i.y)'
[: +/ [: % [ ^ 1 + [: i. ]
13 : '+/ %(x^>:i.y)'
[: +/ [: % [ ^ [: >: [: i. ]
不过,有太多的大写字母 ( [:
) 不能称之为丑陋,但这是一个开始。
于 2013-02-22T16:31:50.377 回答