私はWikipedia article on homoiconityを理解しようとしていましたが、あまりにも冗長で、単語の後ろの主な理論を簡潔に説明していません。私は英語のネイティブスピーカーではないということを付け加えておきます。同種性はどういう意味ですか?
言語がホモ型である場合、正確にはどういう意味ですか? C#、Java、またはJavaScriptを非同型言語にする要因は何ですか?
私はWikipedia article on homoiconityを理解しようとしていましたが、あまりにも冗長で、単語の後ろの主な理論を簡潔に説明していません。私は英語のネイティブスピーカーではないということを付け加えておきます。同種性はどういう意味ですか?
言語がホモ型である場合、正確にはどういう意味ですか? C#、Java、またはJavaScriptを非同型言語にする要因は何ですか?
Lispファミリの一般的な特性である「コードとしてのデータ」を意味します。
(add 2 3)
上記の文字列のように、これもリストでも関数呼び出しでもあります。 "Homo"接頭辞はこの特性を表しています。
プログラムはデータ構造として解釈するため、Schemeはホモアイコンです。
'(define (foo x) (* x x))
ようにリスト、define
された第1要素、第二(foo x)
(リスト)であり、。引用符'
の意味:これを解釈せず、そのままリストとして残してください。 '
を削除すると、Schemeの関数定義である
(define (foo x) (* x x))
が取得されます。 Schemeプログラムの定義はネストされたリスト式(それによって一種の「構文ツリーリテラル」)であり、Schemeは動的言語ですから、これを使って非常に強力なマクロ/コード生成システムを構築することができます。
Javaは、ツリーフラグメントを解析するために評価されるこれらの種類の "プログラムリテラル"を提供しないため、ホモアイコンではありません。もちろん、あなたはそれが文字列ではなく、構造化された用語だからあなたは、解析し、コンパイラに送り、それは厄介だ可能性があり、文字列
String helloWorld =
"class Hello { public static void main(System.out.println(\"Hello, world!\"); }";
を定義することができます。
ここで説明されているように、私はそれが何もかもを意味するとは思わない:http://www.expressionsofchange.org/dont-say-homoiconic/ –