axiom-developer
[Top][All Lists]

## [Axiom-developer] [MutualRecursion] (new)

 From: Bill Page Subject: [Axiom-developer] [MutualRecursion] (new) Date: Mon, 17 Jan 2005 21:55:14 -0600

Here is an example of defining functions by mutual recursion in Axiom

We start with a "bootstrap" definition of 'parity(n)\$Even'. All that is really needed here is a package that exports a function named 'parity' with the right signature. This particular function will never be called and will be re-defined later. It's only purpose is as a placeholder to allow the later definition of **ODD**. \begin{axiom} )abbrev package EVEN Even Even(): E == I where E == with parity: Integer -> Boolean I == add parity(n) == true \end{axiom} Now we can define 'parity(n)\$Odd'. It depends on **EVEN**.

\begin{axiom}
)abbrev package ODD Odd
Odd(): E == I where
E == with
parity: Integer -> Boolean
parity(n:Integer) ==
--    output("ODD",n::OutputForm)$OutputPackage (n>0) => parity(n-1)$Even
(n<0) => parity(n+1)$Even false \end{axiom} But the bootstrap definition of **EVEN** is incomplete. It really depends (recusively) on **ODD**. So finally we need the full (re-)definition of 'parity(n)\$Even'

\begin{axiom}
)abbrev package EVEN Even
Even(): E == I where
E == with
parity: Integer -> Boolean
parity(n) ==
--    output("EVEN",n::OutputForm)$OutputPackage n>0 => parity(n-1)$Odd
n<0 => parity(n+1)$Odd true \end{axiom} Now we can test the new functions: \begin{axiom} parity(10)$Even
parity(8)$Odd parity(-1111)$Odd
\end{axiom}

--