Understanding Schema Function

The next question was asked at our programming language exam, and I can hardly confuse how this works. Can someone tell me what a code stream is? I ran it in racket and I know what the answer is. It seems that the first lambda function takes two other functions as an argument. But then, where are the inputs transmitted (lambda (x) 2)and (lambda (y) 3)?

(((lambda (x y) (x y)) (lambda (y) (lambda (y x) (x (x y)))) (lambda (x) (lambda (x y) (x (y x))))) (lambda (x) 2) (lambda (y) 3))

Answer to the question: 3.

+4
source share
3 answers

We humans love to call things. A brief notation with short names makes it easy to mentally manipulate the code, because many of our mental abilities are associated with our parallel visual recognition system:

(((lambda (x y) (x y))
  (lambda (y) (lambda (y x) (x (x y))))
  (lambda (x) (lambda (x y) (x (y x)))))
 (lambda (x) 2)
 (lambda (y) 3)) =>

((u               where u = (lambda (x y) (x y))
  f                     f = (lambda (y) (lambda (y x) (x (x y))))
  g)                    g = (lambda (x) (lambda (x y) (x (y x))))
 (lambda (x) 2)
 (lambda (y) 3)) =>

((u               where (u x y) = (x y)
  f                     (f y)   = \(y x) -> (x (x y))     ; (*)
  g)                    (g x)   = \(x y) -> (x (y x))
 (lambda (x) 2)
 (lambda (y) 3)) =>

((f               where (f g)   = \(y x) -> (x (x y))
  g)                    (g x)   = \(x y) -> (x (y x))
 (lambda (x) 2)
 (lambda (y) 3)) =>

(h                where h = \(y x) -> (x (x y))
 p                      p = \(x) -> 2
 q) =>                  q = \(y) -> 3

(h                where (h y x) = (x (x y))
 p                      (p x) = 2
 q) =>                  (q y) = 3

(q (q p))         where (p x) = 2
                        (q y) = 3
    => 

(q 3)             where (q y) = 3
    => 

3

(*) , (lambda (y x) (x (x y))) - x, y. , y (f y) . y , .

+4

!

( #lang) DrRacket. " ". "". "Stepper" ( ).

( !).

(((lambda (x y) (x y))
  (lambda (y) (lambda (y x) (x (x y))))
  (lambda (x) (lambda (x y) (x (y x)))))
 (lambda (x) 2)
 (lambda (y) 3))

enter image description here

+2

( (x) 2) ( (y) 3) ?

println :

(((lambda (x y)
    (println "In Lxy fn")
    (x y))
  (lambda (y)
    (println "In Ly fn")
    (lambda (y x)
      (println "In Lyxi fn")
      (x (x y))))
  (lambda (x)
    (println "In Lx fn")
    (lambda (x y)
      (println "In Lxyi fn")
      (x (y x)))))
 (lambda (x) 2)
 (lambda (y) 3))

:

"In Lxy fn"
"In Ly fn"
"In Lyxi fn"
3

- . :

(((lambda (x y)
    (println "In Lxy fn")
    (x y))
  (lambda (y)
    (println "In Ly fn")
    (lambda (y x)
      (println "In Lyxi fn")
      (x (x y))))
  ;(lambda (x)
  ;  (println "In Lx fn")
  ;  (lambda (x y)
  ;    (println "In Lxyi fn")
  ;    (x (y x))))
  "any value"
  )
 (lambda (x) 2)
 (lambda (y) 3)) 

In your own format, the following produces the same output as before:

(((lambda (x y) (x y))
  (lambda (y) (lambda (y x) (x (x y))))
  ;(lambda (x) (lambda (x y) (x (y x))))
  "any value"
  )
 (lambda (x) 2)
 (lambda (y) 3))
+1
source

Source: https://habr.com/ru/post/1654919/


All Articles