如何在APL中实现相互递归?



我正在尝试在Dyalog APL Win10中使用以下相互递归示例:

even ← { (odd  ⍵-1) ∨ ⍵=0 }
odd  ← { (even ⍵-1) ∧ ⍵>0 }
even 7
WS FULL

看起来并没有在达到定义状态时停止求值。WS FULL显示递归实际上工作,但没有正确终止。

如何在APL中实现相互递归?

p。我对APL很陌生,不知道函数的正确语法。不管怎样,我更喜欢更"实用"的。样式,如果可能的话。

由于是正常功能,不短路,必须使用"保护装置";而不是:

even ← {⍵=0:1 ⋄ odd ⍵-1}
odd  ← {⍵>0:even ⍵-1 ⋄ 0}
even 7
0

或者,您可以定义自己的短路操作符。您可以在applcart上找到现成的定义:

OR   ← {⍺⍺ ⍵:1 ⋄ ⍵⍵ ⍵}
AND  ← {⍺⍺ ⍵:⍵⍵ ⍵ ⋄ 0}
even ← {=∘0 OR  (odd  -∘1) ⍵}
odd  ← {>∘0 AND (even -∘1) ⍵}
even 7
0

相关内容

  • 没有找到相关文章

最新更新