Clojureの角括弧と中括弧はまだS式ですか?


11

私はLispを学び、そこにあるすべてのLispとその違いを調べようとしています。

Schemeの一部の実装では、読みやすくするために角かっこを角かっこと交換可能に使用できることがわかります。

ただし、Clojureでは、ベクトルなどのさまざまなデータ型を表すために角括弧と中括弧が使用されていることがわかります。これらはまだ有効なS式でもありますか、それともアトムと見なされる必要がありますか?これはS式の概念全体を「壊し」、それによってClojureを「不純な」Lispにしませんか?

回答:


10

ベクトルとマップのリテラル表記(つまり、角かっこと中かっこ)は読み取り専用のシュガーであり、その表記で表現できるものはすべてS式でも表現できます。その結果、パワーやホモイコニック性の損失はなく、実際、多くのlispsでリーダーマクロ(さらに強力だと理解しています)を利用できます。

ちなみに、Clojureは、カスタムの「タグ付き」リテラルを作成するメカニズムを提供することに注意してください。これは、他のリテラルと同様に、コンパイルおよび解釈される前にS式に変換されます。


1
うーん、あなたの答えは、私が私がLispについて理解したと思ったよりも理解していないと思うようにします。ですから、あなたが言っているのは、角括弧と中括弧は実際にはS式そのものではないということです。Lisp入力のアイデア全体は、すべてがS式であるということだと思いました。答えをもう一度読むために戻ってくる前に、もう少し掘り下げる必要があるようです。ありがとう!
mydoghasworms

それは正しいです-それらはS式ではありません。Lisp構文 S式で始まります。言語で表現できるものはすべてS式で表現できます。しかし、Lispの構文はそれで終わりではありません。多くのLispコンパイラには、ソースコードの特別なパターンがS式に変換される明示的な読み取りマクロ段階があります。これにより、言語作成者はプログラマーに人間に優しい構文を提供できます。重要なことは、これらの特別なリテラルで表されるものはすべてS式でも表すことができるため、ホモイコニシティの利点が失われないことです。
-tvachon

3

S式は、データのテキスト表現です。数字、記号、コンスセル、リスト、文字列、... Common Lispには、配列、ベクトル、より多くの数値型、文字などのテキスト表現もあります... Common Lispは、ユーザーが追加できるようにユーザー拡張可能なリーダーも提供しますデータ型のより多くのテキスト表現。このメカニズムは、Lispプログラミング言語の構文を変更するためにも使用される場合があります(たとえば、他のプログラミング言語からの挿入表現またはステートメントをサポートするため)。

したがって、Lisp方言が追加のデータ型のテキスト表現を提供する場合、これはs-expressionの概念によく適合します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.