объяснение порядка лямбда-ракетки - PullRequest
0 голосов
/ 11 января 2020
(define povrch-valce
(lambda (V h)
((lambda (r)
(* 2 r pi (+ r h)))
(sqrt (/ V pi h)))))

Если я правильно понимаю (V h) - это параметры, а тело: ((lambda (r) ( * 2 r pi (+ r h))) (sqrt (/ V pi h)))

Тогда у нас есть лямбда (r), параметр (r) и тело:

(* 2 r pi (+ r h)))
(sqrt (/ V pi h)))))

Может кто-нибудь объяснить, пожалуйста, в каком порядке обрабатывается это последнее тело? Я не понимаю, как рассчитывается (sqrt (/ V pi h)) первым, даже когда его второй в порядке.

1 Ответ

1 голос
/ 11 января 2020

Используя редактор, который корректно выравнивает код, например, DrRacket, функция имеет следующий вид:

(define povrch-valce
  (lambda (V h)
    ((lambda (r)
       (* 2 r pi (+ r h)))
     (sqrt (/ V pi h)))))

, то есть povrch-valce - это функция с двумя параметрами, V и h, тело которого:

((lambda (r)
   (* 2 r pi (+ r h)))
 (sqrt (/ V pi h)))))

, то есть (обратите внимание на две скобки):

(f (sqrt (/ V pi h)))

, где f - функция:

(lambda (r)
  (* 2 r pi (+ r h)))

это функция, примененная к результату вызова sqrt.

Итак, шаги оценки чего-то вроде (povrch-valce 2 3) следующие:

  1. Вычислить (sqrt (/ V pi h)); результат равен 0,46065886596178063

  2. Передайте это значение функции f; результат равен 10.016548388032545

  3. Это значение, возвращаемое при первоначальном вызове.

...