2006. 10. 19.

들을만한 음악들~

Anne Murray - You Needed Me
Queen - Save me
Radiohead - No surprise
Oasis - Stop crying your heart out
Hoobastank - If I Were You
Lifehouse - you and me
Sarah McLachla - Angel
Jim Reeves - Welcome to my world
Sarah Brightman - First of may
Westlife - Seasons In The Sun
The Police - Every Breath You Take
Don Mclean - Vincent
Barbra Streisand - Memory
Bette Midler - The Rose
Eva Cassidy - Time After Time
Michael Bolton-Lean on me
The Snowman OST - Walking in the Air
Lighthouse Family - Free
Deep Purple - Soldier of Fortune
Carpenters - Yesterday Once More

2006. 10. 16.

define과 define-let

정의에 관련된 define에 let이 붙으면 조금 복잡한 수식으로 바뀐다.


* (define (NAME ARGs) (...) )
* (define (NAME ARGS)
o (let ((inner-def1)
+ (inner-def2)
+ ...
+ (inner-defn))
+ (...)
o ))

즉 (define (INTERFACE) (let (DEFS) (REAL-DEF))) 과 같은 식이 된다.

여기에 lambda식이 붙으면 더 골때려짐.

결론..

패턴을 외우자!

2006. 10. 11.

Define과 Lambda 비교

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 등과 같이 어떤 프로시져를 매개변수로 받는 프로시져를 정의내에서 사용하는 경우라면 상당한 이득을 볼 수 있다.