同性恋究竟是什么意思?

时间:2011-06-27 12:15:20

标签: programming-languages terminology theory homoiconicity

我试图理解Wikipedia article on homoiconity,但它太冗长,并没有简明扼要地解释这个词背后的主要理论。我应该补充一点,我不是母语为英语的人,所以我更喜欢简单的英语而不是学术白皮书。

那么,如果一种语言是同质的,那究竟是什么意思呢?是什么让C#,Java或JavaScript非同质?

3 个答案:

答案 0 :(得分:11)

这意味着“代码作为数据”,这是Lisp系列的一般特征。

(add 2 3)

就像上面的字符串一样,它既是列表又是函数调用。 “Homo”前缀代表了这一特征。

答案 1 :(得分:10)

Scheme是同源的,因为它的程序有一个解释为数据结构。

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

是一个列表,第一个元素是define,第二个(foo x)(列表),依此类推。引号'表示:不解释它,将其保留为列表。如果我们移除'我们获得

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

这是一个Scheme函数定义。因为Scheme程序定义是嵌套的列表表达式(从而是一种“语法树文字”),而Scheme是一种动态语言,你可以用它来制作非常强大的宏/代码生成系统。

现在Java不仅仅是纯粹的标志性因为它没有提供这些评估解析树片段的“程序文字”。当然,您可以定义一个字符串

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

你可以解析并提供给编译器,但这很尴尬,因为它是一个字符串而不是结构化术语。

答案 2 :(得分:0)

同调对不同的人可能意味着不同的事情。最初是定义 在 TRAC 语言的上下文中,例如:

因为TRAC程序和文本在内部和内部具有相同的表示形式 在处理器外部,从均等意义上讲,均等性适用于术语 相同,并且图标含义表示。

但是,这个定义是有问题的,因为很难精确地确定 内部和外部表示的含义是什么。也根本不是什么 今天大多数人都这么说。

今天,大多数人可能会按照已接受的答案表达某些意思 这里是Mike Yang提出的,即结构化数据在语言中的表示形式 很优雅(字面语法),并且这种数据结构本身就是主要手段 代表代码。

为了进一步混淆,此概念通常称为“代码即数据”( 本身就是一个非常重载的术语)。

更多信息在这里: