비슷한 질문이 이전에 제기 된 것을 보았지만 여기서 또 다른 문제를 이해하지 못합니다.스킴 - let 기능을 사용하는 함수
(define x 2)
(define a 2)
(define goo
(lambda (x)
(display x)
(lambda (y) (/ x y))))
(define foo
(let ((f (goo a)))
(lambda (x)
(if (= x 0)
x
(f x)))))
(foo (foo 0))
의 반환 값은 무엇인가 :
여기에 두 가지 기능입니까? 무엇이 화면에 출력됩니까? 내가 알고있는 것처럼
, 내가 처음에 (foo 0)
을 실행할 때, 2
은 (우리가 기능 goo
를 입력합니다) 인쇄되며, 반환 값이 0
될 것입니다. 그런 다음 (foo (foo 0))
=>(foo 0)
을 사용하여 foo
함수를 다시 입력합니다. 우리는 다시 goo
함수를 입력하고 2
이 출력됩니다. 하지만 실행할 때 2
이 한 번만 인쇄됩니다. let
에 대한 중요한 문제가 누락되어 있고 lambda
에 대한 연결이 누락 된 것 같습니다.
탱크 u. 그러나 "let"의 본문은 다음과 같습니다. (lambda (x) x (fx)) 의미 - "foo"를 평가할 때마다 let을 입력해야합니다. 그 때문에, 나는 또한 함수 "goo"(re-defind)를 입력했다. 누락 된 부분이 무엇입니까? – Tom
x가 0이 아닌 경우 f를 다시 계산합니다. f는 foo가 정의 될 때 (goo a)를 평가 한 결과입니다. f가 이미 바인드 된 경우, foo를 실행할 때마다 리 바인드되지 않습니다. –
위의 편집을 참조 할 수있는 예제를 참조하십시오. –