RosettaCodeData/Task/Ackermann-function/Elena/ackermann-function.elena

34 lines
685 B
Plaintext

#define std'dictionary'*.
#define std'patterns'*.
#subject m, n.
// --- Ackermann function ---
#symbol Ackermann &m:anM &n:anN =
[
#if anM
ifequal:0 [ ^ anN + 1. ]
| greater:0 ?
[
#if anN
ifequal:0 [ ^ Ackermann &&m:(anM - 1) &n:1. ]
| greater:0 ? [ ^ Ackermann &&m:(anM - 1) &n:(Ackermann &&m:anM &n:(anN - 1)). ].
].
control fail.
].
#symbol Program =
[
loop &&from:0 &to:3 run: anM =
[
loop &&from:0 &to:5 run: anN =
[
'program'output << "A(" << anM << "," << anN << ")=" << (Ackermann &&m:anM &n:anN) << "%n".
].
].
'program'Input get.
].