Clojure의 대괄호와 중괄호는 여전히 S- 표현입니까?


12

나는 Lisp를 배우려고 노력하고 있으며 거기의 모든 Lisp와 그 차이점을보고 있습니다.

Scheme의 일부 구현에서 가독성을 위해 대괄호와 대괄호를 상호 교환하여 사용할 수 있다는 것을 알았습니다. 따라서 동일하게 취급되기 때문에 여전히 다른 모든 것과 마찬가지로 S- 표현이라고 가정합니다.

그러나 Clojure에서 대괄호와 중괄호는 벡터 등과 같은 다른 데이터 유형을 나타내는 데 사용됩니다. 이것들은 여전히 ​​유효한 S- 표현입니까, 아니면 원자로 간주되어야합니까? 이것이 S- 표현의 전체 개념을 "파괴"하여 Clojure를 "불완전한"리스프로 만들지 않습니까?


기술적으로 "대괄호가 s- 표현 인 경우 어떻게 괄호로 대신 표현할 수 있습니까?" 질문의 일부는 아니지만 그것이 내가 알고 싶은 것입니다.
Qwertie

답변:


10

벡터 및 맵에 대한 리터럴 표기법 (즉, 대괄호 및 중괄호)은 읽기 전용 설탕이며 해당 표기법으로 나타낼 수있는 모든 항목은 S- 표현식으로 나타낼 수도 있습니다. 결과적으로, 전력 또는 동성애의 손실이 없으며, 실제로 이해하기 쉬운 독자 매크로 (더 강력한 것으로 이해합니다)는 많은 lisp에서 사용할 수 있습니다.

또한 Clojure는 이제 다른 리터럴과 마찬가지로 컴파일 및 해석되기 전에 S- 표현식으로 변환되는 사용자 정의 "태그 된"리터럴을 생성하는 메커니즘을 제공합니다.


1
음, 당신의 대답은 제가 Lisp에 대해 생각했던 것보다 덜 이해한다고 생각합니다. 그래서 당신이 말하는 것은 사각형과 중괄호가 실제로 S- 표현이 아니라는 것입니다. Lisp 입력의 모든 아이디어는 모든 것이 S- 표현이라고 생각했습니다. 답을 다시 읽기 위해 돌아 오기 전에 좀 더 파고 들어야 할 것 같습니다. 감사!
mydoghasworms

맞습니다-그들은 S- 표현식이 아닙니다. 리스프 구문 언어로 표현 될 수있는 모든 것이 S- 표현으로 표현 될 수 있다는 점에서 S- 표현으로 시작합니다. 그러나 Lisp 구문은 여기서 끝나지 않습니다. 많은 Lisp 컴파일러에는 명시적인 읽기 매크로 단계가 있으며 소스 코드의 특수 패턴이 S- 표현식으로 변환됩니다. 이를 통해 언어 작성자는 프로그래머에게 친숙한 구문을 제공 할 수 있습니다. 주의해야 할 중요한 점은 이러한 특수 리터럴로 표현 된 모든 항목을 S- 표현식으로 표현할 수 있기 때문에 호모 닉의 이점은 전혀 손실되지 않습니다.
tvachon

3

S- 표현식은 데이터의 텍스트 표현입니다. 숫자, 기호, 단점 셀, 목록, 문자열 등 ... 공통 리스프는 또한 배열, 벡터, 더 많은 숫자 유형, 문자에 대한 텍스트 표현을 가지고 있습니다. ... 공통 리스프는 사용자가 확장 할 수있는 리더를 제공하므로 사용자가 추가 할 수 있습니다 데이터 유형에 대한 더 많은 텍스트 표현. 때때로이 메커니즘은 Lisp 프로그래밍 언어의 구문을 변경하는 데에도 사용됩니다 (예 : 다른 프로그래밍 언어의 접두어 표현식 또는 명령문 지원).

따라서 Lisp 언어가 추가 데이터 유형에 대한 텍스트 표현을 제공하는 경우 이는 s- 표현 아이디어에 적합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.