문제

의문:

((lambda (x y) (x y)) (lambda (x) (* x x)) (* 3 3))

이것은 중간에 #1이었다. 나는 "81 9"를 넣었다. 그는 내가 Lawl을 건너는 것을 잊었다 고 생각했다. 그래서 나는 81을 건너고 그는 Aww를 간다. 어쨌든, 나는 그것이 왜 81인지 이해하지 못한다.

나는 이유를 이해한다 (lambda (x) (* x x)) (* 3 3) = 81,하지만 첫 번째 람다는 X와 Y 값이 무엇인지 이해하지 못합니다. [body] (x y) 하다.

그래서 나는 누군가가 왜 첫 번째 부분이 아무것도하지 않는 것처럼 보이지 않는지 설명 할 수 있기를 바랐습니다.

도움이 되었습니까?

해결책

이것은 명확히하기 위해 약간의 들여 쓰기가 필요합니다

((lambda (x y) (x y))
 (lambda (x) (* x x))
 (* 3 3))
  • (lambda (x y) (x y)); 전화 x ~와 함께 y 단지 매개 변수로.
  • (lambda (x) (* x x)); 매개 변수의 제곱으로 평가하십시오.
  • (* 3 3); 9로 평가하십시오

따라서 모든 것은 "9를 매개 변수로 제곱 함수를 호출"합니다.

편집 : 같은 것을 작성할 수 있습니다

((lambda (x) (* x x))
 (* 3 3))

운동의 의도는 체계 형식을 평가하는 데 암시 적 기능 응용 프로그램이 어떻게 포함되는지 강조하는 것 같아요.

다른 팁

다시 보자 ...

((lambda (x y) (x y)) (lambda (x) (* x x)) (* 3 3))

양식을 평가하기 위해 각 부분을 차례로 평가합니다. 우리는 양식에 세 가지 요소가 있습니다. 이것은 첫 번째 (기능) 위치에 있습니다.

(lambda (x y) (x y))

이것은 형식의 두 번째 요소이며 기능에 대한 첫 번째 인수입니다.

(lambda (x) (* x x))

형식의 마지막 요소, 따라서 함수에 대한 두 번째 인수.

(* 3 3)

이 경우 평가 순서는 중요하지 않으므로 왼쪽에서 시작하겠습니다.

(lambda (x y) (x y))

Lambda는 함수를 생성하므로 두 인수 인 x와 y 인 함수로 평가 한 다음 x를 Y에 적용합니다 (즉, 단일 인수 y가있는 x를 호출). 이것을 부르자 전화 1.

(lambda (x) (* x x))

이것은 단일 인수를 취하고이 인수의 제곱을 반환하는 함수로 평가됩니다. 그래서 우리는 이것을 부를 수 있습니다 정사각형.

(* 3 3)

이것은 분명히 평가합니다 9.

자, 이번 첫 평가 후에 우리는 다음과 같습니다.

(call-1 square 9)

이를 평가하기 위해 우리는 전화합니다 전화 1 두 가지 논쟁으로 정사각형 그리고 9. 지원 전화 1 우리에게 주어지다:

(square 9)

그것이 무엇이기 때문입니다 전화 1 그렇습니다 - 그것은 첫 번째 주장을 두 번째 논쟁으로 부릅니다. 이제 정사각형 9 ~이다 81, 이것은 전체 표현의 가치입니다.

아마도 해당 코드를 일반적인 LISP로 번역하면 행동을 명확히하는 데 도움이됩니다.

((lambda (x y) (funcall x y)) (lambda (x) (* x x)) (* 3 3))

또는 더 명시 적으로 :

(funcall (lambda (x y) (funcall x y))
         (lambda (x) (* x x))
         (* 3 3))

실제로, 그 첫 람다는 다음과 같이 귀여지기 때문에 유용한 일을하지 않습니다.

(funcall (lambda (x) (* x x)) (* 3 3))

그것은 동일합니다

(let ((x (* 3 3)))
  (* x x))

동등합니다

(let ((x 9))
  (* x x))

동등합니다

(* 9 9)

81과 같습니다.

지금까지 게시 된 답변은 좋기 때문에 이미 말한 것을 복제하기보다는 프로그램을 볼 수있는 또 다른 방법이 있습니다.

(define (square x) (* x x))

(define (call-with arg fun) (fun arg))

(call-with (* 3 3) square)

여전히 이상하게 보입니까?

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