R6RS Scheme: 문법 데이터와 datum 값

R6RS Scheme: 문법 데이터와 datum 값

Scheme의 문법 데이터(syntactic datum)와 datum 값(datum value) 개념을 설명해요. 데이터를 텍스트로 표현하는 방법과 이를 리터럴 표현식으로 바꾸는 방법을 다뤄요.

출처: 문서

본문

Scheme 객체의 일부는 *datum 값(datum values)*이라고 불러요. 여기에는 불리언, 숫자 객체, 문자, 심볼, 문자열뿐 아니라 요소가 데이터인 리스트와 벡터도 포함돼요. 각 datum 값은 *문법 데이터(syntactic datum)*로서 텍스트 형태로 표현될 수 있는데, 정보 손실 없이 써내고 읽어들일 수 있어요. 하나의 datum 값은 여러 개의 서로 다른 문법 데이터로 표현될 수 있어요. 또한 각 datum 값은 대응하는 문법 데이터 앞에 '를 붙임으로써 쉽게 프로그램의 리터럴 표현식으로 번역될 수 있어요:

'23  ⇒ 23
'#t  ⇒ #t
'foo  ⇒ foo
'(1 2 3)  ⇒ (1 2 3)
'#(1 2 3)  ⇒ #(1 2 3)

이전 예들에 나타난 '는 숫자 객체나 불리언의 표현에는 필요하지 않아요. 문법 데이터 foo는 이름이 "foo"인 심볼을 나타내고, 'foo는 그 심볼을 값으로 갖는 리터럴 표현식이에요. (1 2 3)은 요소가 1, 2, 3인 리스트를 나타내는 문법 데이터이고, '(1 2 3)은 이 리스트를 값으로 갖는 리터럴 표현식이에요. 마찬가지로 #(1 2 3)은 요소가 1, 2, 3인 벡터를 나타내는 문법 데이터이고, '#(1 2 3)은 그에 해당하는 리터럴이에요.

문법 데이터는 Scheme 형(form)들의 초집합(superset)이에요. 따라서 데이터를 사용해 Scheme 형을 데이터 객체로 표현할 수 있어요. 특히 심볼을 사용해 식별자를 나타낼 수 있어요.

'(+ 23 42)  ⇒ (+ 23 42)
'(define (f x) (+ x 42))  ⇒ (define (f x) (+ x 42))

이것은 Scheme 소스 코드를 다루는 프로그램, 특히 인터프리터와 프로그램 변환기를 작성하는 것을 용이하게 해요.

더 알아보기 (Learn more)

출처: Syntactic data and datum values - R6RS