I want to change decimal encoding number to chruch encoding number ?
(define (encode n)
(lambda(fn)(lambda(x) (funPower (fn n)x))))
What's wrong with my code? Thank you.
Data struct and hardware decided church number is so so slower than binary number.
#lang racket
; church-number->n : procedure -> number
(define (church-number->n cn)
((cn (λ (x) (+ 1 x))) 0))
; n->church-number : number -> procedure
(define (n->church-number n)
(local [(define zero (λ (f) (λ (x) x)))
(define add-1
(lambda (n)
(lambda (f)
(lambda (x) (f ((n f) x))))))
(define (aux n cn)
(if (= 0 n)
cn
(aux (- n 1) (add-1 cn))))]
(aux n zero)))
;;; TEST
(church-number->n (n->church-number 101)) ; 101
(church-number->n (n->church-number (church-number->n (n->church-number 666)))) ; 666
; still slow than binary number
(church-number->n
(compose (n->church-number 100) (n->church-number 5))) ; 500
(define mult
(lambda (m)
(lambda (n)
(lambda (f)
(lambda (x)
((m (n f)) x))))))
(church-number->n ((mult (n->church-number 100)) (n->church-number 5))) ; 500