2011-06-27 9 views
19

私はWikipedia article on homoiconityを理解しようとしていましたが、あまりにも冗長で、単語の後ろの主な理論を簡潔に説明していません。私は英語のネイティブスピーカーではないということを付け加えておきます。同種性はどういう意味ですか?

言語がホモ型である場合、正確にはどういう意味ですか? C#、Java、またはJavaScriptを非同型言語にする要因は何ですか?

+0

ここで説明されているように、私はそれが何もかもを意味するとは思わない:http://www.expressionsofchange.org/dont-say-homoiconic/ –

答えて

10

Lispファミリの一般的な特性である「コードとしてのデータ」を意味します。

(add 2 3) 

上記の文字列のように、これもリストでも関数呼び出しでもあります。 "Homo"接頭辞はこの特性を表しています。

9

プログラムはデータ構造として解釈するため、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!\"); }"; 

を定義することができます。

関連する問題