3

作为初学者练习,我尝试sum(1/(1+0.03)^n for n = 1 to 30使用J 计算以下总和+/%(1 + 0.03)^ >:i.30。我怎样才能把它写成一个简单的默认形式?我所尝试的一切都比上面的显式形式丑得多>:@[ (+/&:%)@:^ >:&i.@]

4

2 回答 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 回答