Scheme에서 초반에 개념을 제일 잡기 힘들었던 것이 define과 lambda의 관계였다.
일단 다음의 두 항목은 동일한 작용을 한다
1. (define (square x) (* x x))
2. (define square (lambda (x) (* x x)))
lambda는 일반적으로 이름없는 프로시져를 정의한다.
말하자면 1에서 square라는 이름의 프로시져를 정의했다면 2에서 lambda문은 이름을 뺀 나머지를 프로시저로 정의하고 이를 square라는 이름에 대입한 것이다.
* (define (square x) (* x x))
* (lambda (x) (* x x))
2에서 define 부분을 삭제하고 1에서의 정의와 비교한 것이다. square라는 이름이 없는 것을 빼면 define과 lambda는 서로 같은 구조를 갖는 것을 볼 수 있다.
이름없는 프로시져는 프로그램상에서 사용할 수 없다. 따라서 이를 다시 어떤 이름으로 정의한 것이 2의 전체 정의이다.
물론 일반적인 정의에서는 별 의미를 찾을 수 없겠지만 map 등과 같이 어떤 프로시져를 매개변수로 받는 프로시져를 정의내에서 사용하는 경우라면 상당한 이득을 볼 수 있다.

일단 다음의 두 항목은 동일한 작용을 한다
1. (define (square x) (* x x))
2. (define square (lambda (x) (* x x)))
lambda는 일반적으로 이름없는 프로시져를 정의한다.
말하자면 1에서 square라는 이름의 프로시져를 정의했다면 2에서 lambda문은 이름을 뺀 나머지를 프로시저로 정의하고 이를 square라는 이름에 대입한 것이다.
* (define (square x) (* x x))
* (lambda (x) (* x x))
2에서 define 부분을 삭제하고 1에서의 정의와 비교한 것이다. square라는 이름이 없는 것을 빼면 define과 lambda는 서로 같은 구조를 갖는 것을 볼 수 있다.
이름없는 프로시져는 프로그램상에서 사용할 수 없다. 따라서 이를 다시 어떤 이름으로 정의한 것이 2의 전체 정의이다.
물론 일반적인 정의에서는 별 의미를 찾을 수 없겠지만 map 등과 같이 어떤 프로시져를 매개변수로 받는 프로시져를 정의내에서 사용하는 경우라면 상당한 이득을 볼 수 있다.

댓글 없음:
댓글 쓰기