Y Combinator Implementation Scheme

I am really new to programming circuits. I recently met the Y-combinator function in lambda calculus, something like this Y ≡ (λy.(λx.y(xx))(λx.y(xx))). I wanted to implement it in a circuit, I was looking for alot, but I did not find any implementation that exactly matches the above structure. Some of them that I found are listed below:

(define Y
(lambda (X)
  ((lambda (procedure)
     (X (lambda (arg) ((procedure procedure) arg))))
   (lambda (procedure)
     (X (lambda (arg) ((procedure procedure) arg)))))))

and

(define Y
  (lambda (r)
    ((lambda (f) (f f))
     (lambda (y)
       (r (lambda (x) ((y y) x)))))))

As you can see, they do not match the structure of this Y ≡ (λy.(λx.y(xx))(λx.y(xx)))combinator function . How can I implement it in a circuit in exactly the same way?

+4
source share
1 answer

, Lazy Racket, , - , Scheme. .

Y Z:

(define Z
  (lambda (f)
    ((lambda (g) (g g))
     (lambda (g)
       (f (lambda args (apply (g g) args)))))))

, , , - (g g), , :

(define Z
  (lambda (f)
    ((lambda (g)
       (f (lambda args (apply (g g) args))))
     (lambda (g)
       (f (lambda args (apply (g g) args)))))))

. , . , apply . :

(define ackermann
  (lambda (m n)
    (cond
      ((= m 0) (+ n 1))
      ((= n 0) (ackermann (- m 1) 1))
      (else (ackermann (- m 1) (ackermann m (- n 1)))))))

(ackermann 3 6) ; ==> 509

Z :

((Z (lambda (ackermann)
      (lambda (m n)
        (cond
        ((= m 0) (+ n 1))
        ((= n 0) (ackermann (- m 1) 1))
        (else (ackermann (- m 1) (ackermann m (- n 1))))))))
 3
 6) ; ==> 509

, , , .

, , . :

(define Y
  (lambda (f)
    ((lambda (g) (g g))
     (lambda (g) (f (g g))))))

, , , Y , , f (f (g g)), (g g), , , (f (g g)) .. , (g g) . , (g g) , f , . add1, (lambda (x) (add1 x)), , . (lambda args (apply (g g) args)) (g g), , . , , .

+3

All Articles