28

同性愛に関するウィキペディアの記事を理解しようとしましたが、冗長すぎて、単語の背後にある主な理論を簡潔に説明していません。私は英語を母国語としないので、学術的なホワイト ペーパーの引用よりも簡単な英語を好みます。

では、ある言語がホモイコニックであるとは、正確にはどういう意味なのでしょうか? C#、Java、または JavaScript がホモイコニックではない理由は何ですか?

4

3 に答える 3

15

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

(add 2 3)

上記の文字列と同じように、これはリストと関数呼び出しの両方です。「ホモ」接頭辞は、この特性を表しています。

于 2012-12-14T02:09:45.687 に答える
12

Scheme is homo-iconic because its programs have an interpretation as data structures.

'(define (foo x) (* x x))

is a list, the first element of which is define, the second (foo x) (a list), and so on. The quote mark ' means: don't interpret this, leave it as a list. If we remove the ' we get

(define (foo x) (* x x))

which is a Scheme function definition. Because Scheme program definitions are nested list expressions (and thereby a sort of "syntax tree literals"), and Scheme is a dynamic language, you can play tricks with this to build very powerful macro/code generating systems.

Now Java isn't homo-iconic simply because it doesn't provide these kind of "program literals" that evaluate to parse tree fragments. Of course, you can define a string

String helloWorld =
   "class Hello { public static void main(System.out.println(\"Hello, world!\"); }";

which you could parse and feed to a compiler, but that's awkward, because it's a string rather than a structured term.

于 2011-06-27T12:26:58.220 に答える
3

同性愛は、人によって意味が異なる場合があります。もともと、言語TRACのコンテキストで次のように定義されていました。

TRAC プロシージャとテキストは、プロセッサの内外で同じ表現を持つため、ホモ アイコンという用語が適用されます。ホモは同じ意味で、アイコンは表現を意味します。

ただし、内部表現と外部表現が何を意味するのかを正確に特定するのは難しいため、その定義には問題があります。また、今日、ほとんどの人が意味するものではありません。

今日、ほとんどの人はおそらく、Mike Yang がここで受け入れた回答の行に沿って何かを意味しています。つまり、言語での構造化データの表現はエレガント (リテラル構文) であり、そのようなデータ構造自体がコードを表現する主な手段であるということです。

さらに混乱させるために、この概念は「データとしてのコード」と呼ばれることがよくあります (これ自体が非常にオーバーロードされた用語です)。

詳細はこちら:

于 2020-06-04T08:38:10.137 に答える