我正在尝试在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