Example #1
0
        public static IChurchBoolean IsEven(this INaturalNumber n)

        {
            return(n.Match(

                       zero: new ChurchTrue(),         // 0 is even, so true

                       succ: p1 => p1.Match(           // Match previous

                           zero: new ChurchFalse(),    // If 0 then successor was 1

                           succ: p2 => p2.IsEven()))); // Eval previous' previous
        }
Example #2
0
        // The formula used here is

        // x * y = 1 + (x - 1) + (y - 1) + ((x - 1) * (y - 1))

        // It follows like this:

        // x* y =

        // (x - 1 + 1) * (y - 1 + 1) =

        // ((x - 1) + 1) * ((y - 1) + 1) =

        // ((x - 1) * (y - 1)) + ((x - 1) * 1) + ((y - 1) * 1) + 1 * 1 =

        // ((x - 1) * (y - 1)) + (x - 1) + (y - 1) + 1

        public static INaturalNumber Multiply(

            this INaturalNumber x,

            INaturalNumber y)

        {
            return(x.Match(zero: new Zero(),

                           succ: px => y.Match(

                               zero: new Zero(),

                               succ: py =>

                               One

                               .Add(px)

                               .Add(py)

                               .Add(px.Multiply(py)))));
        }
Example #3
0
 public static IChurchBoolean IsEven(this INaturalNumber n)
 => n.Match(
     zero: new ChurchTrue(),
     succ: p1 => p1.Match(
         zero: new ChurchFalse(),        // If 0 then successor was 1
         succ: p2 => p2.IsEven()));      // Eval previous' previous
Example #4
0
 public static IChurchBoolean IsZero(this INaturalNumber n)
 => n.Match <IChurchBoolean>(
     zero: new ChurchTrue(),
     succ: _ => new ChurchFalse());
Example #5
0
 public static INaturalNumber Add(this INaturalNumber x, INaturalNumber y)
 => x.Match(
     zero: y,
     succ: p => new Successor(p.Add(y)));
Example #6
0
 public Successor(INaturalNumber n)
 {
     predecessor = n;
 }
Example #7
0
 public static IChurchBoolean IsOdd(this INaturalNumber n)
 {
     return(new ChurchNot(n.IsEven()));
 }
Example #8
0
 public static IChurchBoolean IsEven(this INaturalNumber n)
 {
     return(n.Accept(new IsEvenNaturalNumberVisitor()));
 }
Example #9
0
 // The formula used here is
 // x * y = 1 + (x - 1) + (y - 1) + ((x - 1) * (y - 1))
 // It follows like this:
 // x* y =
 // (x - 1 + 1) * (y - 1 + 1) =
 // ((x - 1) + 1) * ((y - 1) + 1) =
 // ((x - 1) * (y - 1)) + ((x - 1) * 1) + ((y - 1) * 1) + 1 * 1 =
 // ((x - 1) * (y - 1)) + (x - 1) + (y - 1) + 1
 public static INaturalNumber Multiply(
     this INaturalNumber x,
     INaturalNumber y)
 {
     return(x.Accept(new MultiplyNaturalNumberVisitor(y)));
 }
Example #10
0
 public static INaturalNumber Add(
     this INaturalNumber x,
     INaturalNumber y)
 {
     return(x.Accept(new AddNaturalNumberVisitor(y)));
 }
Example #11
0
 public int VisitSucc(INaturalNumber predecessor)
 {
     return(1 + predecessor.Count());
 }
Example #12
0
        // More memmbers go here...

        public static int Count(this INaturalNumber n)
        {
            return(n.Accept(new CountNaturalNumberVisitor()));
        }
Example #13
0
 public IChurchBoolean VisitSucc(INaturalNumber predecessor)
 {
     // Evaluate previous' previous value
     return(predecessor.IsEven());
 }
Example #14
0
 public IChurchBoolean VisitSucc(INaturalNumber predecessor)
 {
     // Match previous
     return(predecessor.Accept(
                new IsEvenPredecessorNaturalNumberVisitor()));
 }
Example #15
0
                succ: p2 => p2.IsEven()));      // Eval previous' previous

        public static IChurchBoolean IsOff(this INaturalNumber n)
        => new ChurchNot(n.IsEven());
Example #16
0
 public static int Count(this INaturalNumber n)
 {
     return(n.Match(
                zero: 0,
                succ: p => 1 + p.Count()));
 }
Example #17
0
 public IChurchBoolean VisitSucc(INaturalNumber predecessor)
 {
     return(new ChurchFalse());
 }