(define my-false
(lambda (first) (lambda (second) second)))
(define my-true
(lambda (first) (lambda (second) first)))
(define succ
(lambda (cn) (lambda (s) ((s my-false) cn))))
(define pred
(lambda (cn) (cn my-false)))
(define iszero
(lambda (cn) (cn my-true)))
(define zero
(lambda (x) x))
(define one
(lambda (sel) ((sel my-false) zero)))
(define two
(succ one))
(define three
(succ two))
(define (easy-add cn1 cn2)
(if (((iszero cn1) #t) #f)
cn2
(easy-add (pred cn1) (succ cn2))))
(define (easy-subtract cn1 cn2)
(if (((iszero cn2) #t) #f)
cn1
(easy-subtract (pred cn1) (pred cn2))))
(define (cn-to-num cn)
(if (((iszero cn) #t) #f)
0
(+ 1 (cn-to-num (pred cn)))))
(define (pos cn)
(lambda (f)
((f cn) zero)))
(define (is-pos n)
(iszero (n my-false)))
(define pos-cn-to-num
(lambda (f)(cn-to-num (f my-true))))
(define (neg cn)
(lambda (f)
((f zero) cn)))
(define (is-neg n)
(iszero (n my-true)))
(define neg-cn-to-num
(lambda (f)(cn-to-num (f my-false))))
I'm so confused, my negative functions were failed. any idea?
//try on this on Racket is still return 2 not -2
->>>>(test (neg-cn-to-num (neg two)) -2)