作为初学者练习,我尝试使用sum(1/(1+0.03)^n for n = 1 to 30
计算J,+/%(1 + 0.03)^ >:i.30
中的以下总和。我怎么能把它写成一个简单的默契形式?我尝试过的所有内容都比上面的显式表单>:@[ (+/&:%)@:^ >:&i.@]
答案 0 :(得分:3)
你可以从
开始+/@:%@((1 + 0.03) ^ >:@i.) 30
你可以使用fork使0.03左参数,但使用钩子可以更清晰
(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
答案 1 :(得分: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. ]
但是有太多的上限([:
)称它不那么难看,但这是一个开始。