[英]racket lambda order explanation
(define povrch-valce
(lambda (V h)
((lambda (r)
(* 2 r pi (+ r h)))
(sqrt (/ V pi h)))))
如果我理解正確 (V h) 是參數,主體是: ((lambda (r) ( * 2 r pi (+ rh))) (sqrt (/ V pi h)))
然后我們有 lambda(r),參數是 (r),body 是:
(* 2 r pi (+ r h)))
(sqrt (/ V pi h)))))
有人可以向我解釋一下最后一個身體是按什么順序處理的嗎? 我不明白 (sqrt (/ V pi h)) 是如何首先計算的,即使它是第二個。
使用正確對齊代碼的編輯器,如 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)
的步驟如下:
計算(sqrt (/ V pi h))
; 結果是 0.46065886596178063
將此值傳遞給函數 f; 結果是 10.016548388032545
這是初始調用返回的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.