태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Nonnegative integers without numbers

Tech 2007.11.15 01:10
Ex 2.6 In case representing pairs as procedures wasn't mind-boggling enough, consider that, in a language that can manipulate procedures, we can get by without numbers (at least insofar as nonnegative integers are concerned) by implementing 0 and the operation of adding 1 as

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
    (lambda (f) (lambda (x) (f ((n f) x)))))

Tis representation is knows as Church numerals, after its inventor, Alonzo Church, the logician who invented the λ calculus.

Define one and two (not in terms of zero and add-1) Give a direct definition of the addition procedure +.

=> 저게 왜 'zero'고 저게 대체 왜 '더하기 1'이냐 -_-; 라고 쭝얼거리길 몇분... ㄷㄷㄷ 한참을 뚫어져라 쳐다보니 알듯. 결국, nonnegative integer n은 입력 f를 받아서 fn(x) 라는 함수를 내보내는(입력과 출력이 함수인 함수, meta-function, procedure as data  ...  뭐라 표현하건 간에 -_-;) 함수이다. 자, 그렇다면 시킨대로 one, two 와 이녀석들을 더할 수 있는 프로시져를 만들어 보자.

(define one (lambda (f) (lambda (x) (f x))))

(define two (lambda (f) (lambda (x) (f (f x)))))

(define (add a b)
    (lambda (f) (lambda (x) ((a f) ((b f) x)))))

음, 그리고 이게 제대로 동작하는지 확인하기 위해서 이렇게 만들어진 녀석들을 우리가 볼 수 있는 숫자 형태로 바꿔주는 프로시져도 추가로 만들자. n이 fn(x)으로 표현된다고 하니 f: x->x+1, 시작은 0으로 정의하면 해당 숫자를 얻어낼 수 있다.

(define (tonum n)
    ((n (lambda (x) (+ x 1))) 0))

음 add 프로시져가 여러개의 입력도 받을 수 있으면 좋겠다. car, cdr을 잘 써서 넣으면 될 듯 한데 이건 일단 오늘은 패스.


'Tech' 카테고리의 다른 글

Hadoop 0.15.2 -> 0.17.0  (4) 2008.03.20
Dokuwiki: latex plugin ...  (7) 2008.03.08
Nonnegative integers without numbers  (0) 2007.11.15
ofstream redirect to stdout  (3) 2007.11.10
하둡의 퍼포먼스 (삽질기)  (7) 2007.11.09
Fibo2 ...  (3) 2007.11.05
Trackbacks 0 : Comments 0