문제

운동으로서 나는 람다 가이 같은 것을 함수로 정의하려고 시도하고있다 :

(define let_as_lambda 
  (lambda (var) 
     (lambda (value body) 
       (var body) val)))
.

와 나는 이렇게 전화하기를 희망합니다 :

((let_as_lambda a) (3 (+ a 2)))
.

그러나 바운드 변수를 통과 할 수있는 방법은 없습니다 (이 경우 "A")는 함수의 인수로서 "a").(나는 그것이 조금 이상한 것처럼 보이지만 함수를 반환하는 let_as_lambda (var)가 필요합니다.)

누구 든지이 작업을 수행하는 방법을 보여줄 수 있습니까?모든 조언을 높이 평가합니다.

사실,이 람다와 동등한 표현식을 사용하는 것 :

(let ((p1 v1) (p2 v2)...) body) = ((lambda (p1 p2...) body) v1 v2...)
.

이 일을 할 수 없습니다 :

(define let_as_lambda 
    (lambda (var val body) 
      ((var body) val)))
.

라고 불리는 : (let_as_lambda a 3 (+ a 2))

동일한 불만 사항을 없음 :

정의 전에 식별자에 대한 참조 : a

도움이 되었습니까?

해결책

let is a syntatic extension defined in terms of lambda. I don't think you can define it as a function. Take a look at the example from The Scheme Programming Language

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top