axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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
  I == add
    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
  I == add
    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}

--
forwarded from http://page.axiom-developer.org/zope/mathaction/address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]