偶数斐波那契数和

Even Fibonacci numbers Sum

即使是斐波那契数列总和也不超过四百万。我在 APL 中使用多行函数,但没有得到输出:

result←Euler2 a;b;c;sum;i;limit
 b←0
 c←1
 sum←0
 i←0
 limit←4000000
 :For i :In limit
     a←b
     b←c
     c←a+b
     :If (0=2|c)
         sum←(sum+c)
     :EndIf
 :EndFor
 result←sum

:For 构造在 :In 关键字之后采用值列表。你只是给了它限制。也许您的意思是 ⍳limit 赋予它从 1 到四百万的所有值?

警告:以下意见。

我会避免使用手动循环和 tradfns。最终的解决方案将(通常)笨拙且缓慢。 APL处理数组的能力很强,能用就用吧

这里有一个不同的可能解决方案,使用 'dfns'。

+/{⍵/⍨0=2|⍵}1↓{⍵,⍨+/2↑⍵}⍣{4000000<⊃⍺} 1 1
⍝ explanation:
{⍵,⍨+/2↑⍵} +/2↑⍵ the sum of the first two items in ⍵
 ⍵,⍨              prepend to ⍵
{⍵,⍨+/2↑⍵} 1 1   is 2 1 1
{⍵,⍨+/2↑⍵} 2 1 1 is 3 2 1 1
⍣  do this (see https://help.dyalog.com/18.0/Content/Language/Symbols/DieresisStar.htm)
{4000000<⊃⍺} 1 1      until the previous element (⊃⍺) is greater than 4 million, starting with the vector 1 1

      'result:', {⍵,⍨+/2↑⍵}⍣{⎕←⍺⋄100<⊃⍺} 1 1
2 1 1
3 2 1 1
5 3 2 1 1
8 5 3 2 1 1
13 8 5 3 2 1 1
21 13 8 5 3 2 1 1
34 21 13 8 5 3 2 1 1
55 34 21 13 8 5 3 2 1 1
89 55 34 21 13 8 5 3 2 1 1
144 89 55 34 21 13 8 5 3 2 1 1
result: 144 89 55 34 21 13 8 5 3 2 1 1

1↓...  remove the first element, as it is greater than 4 million
+/{⍵/⍨0=2|⍵} sum of the even numbers