Programming languages 同象性到底意味着什么?

Programming languages 同象性到底意味着什么?,programming-languages,terminology,theory,homoiconicity,Programming Languages,Terminology,Theory,Homoiconicity,我试图理解这个词,但它太冗长了,不能简明扼要地解释这个词背后的主要理论。我应该补充一点,我不是以英语为母语的人,所以我更喜欢简单的英语,而不是学术白皮书的引语 那么,如果一种语言是同象性的,那么它到底意味着什么呢?是什么使C#、Java或JavaScript成为非同形标志?Scheme是同形标志,因为它的程序解释为数据结构 '(define (foo x) (* x x)) 是一个列表,第一个元素是定义,第二个元素是(foo x)(列表),依此类推。引号“的意思是:不要解释这个,把它作为一个列

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


那么,如果一种语言是同象性的,那么它到底意味着什么呢?是什么使C#、Java或JavaScript成为非同形标志?

Scheme是同形标志,因为它的程序解释为数据结构

'(define (foo x) (* x x))
是一个列表,第一个元素是
定义
,第二个元素是
(foo x)
(列表),依此类推。引号
的意思是:不要解释这个,把它作为一个列表。如果我们删除
,我们会得到

(define (foo x) (* x x))
这是一个Scheme函数定义。因为Scheme程序定义是嵌套的列表表达式(因此是一种“语法树文字”),Scheme是一种动态语言,所以您可以利用它来构建非常强大的宏/代码生成系统

现在,Java不是homo标志性的,因为它不提供用于解析树片段的“程序文本”。当然,您可以定义一个字符串

String helloWorld =
   "class Hello { public static void main(System.out.println(\"Hello, world!\"); }";
它可以解析并提供给编译器,但这很尴尬,因为它是一个字符串而不是一个结构化术语。

它的意思是“代码作为数据”,这是Lisp家族的一个普遍特征

(add 2 3)

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

同象性对不同的人意味着不同的东西。最初,它是被定义的 在TRAC语言的上下文中,例如:

因为TRAC程序和文本在内部和外部具有相同的表示形式 在处理器之外,术语homo IGNORIC适用于homo含义 同样的,图标的意思表示

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

今天,大多数人的意思可能与公认的答案大致相同 由Mike Yang在这里提出,即结构化数据在语言中的表示 是优雅的(文字语法),并且这种数据结构本身就是主要的手段 代表代码的定义

为了进一步混淆问题,这个概念通常被称为“作为数据的代码”(即 这本身就是一个超负荷的术语)

更多信息请点击此处:


正如这里所解释的,我认为它没有什么意义:非常有趣。在学校里,我们了解到引号只是scheme中定义列表的另一种方式,但从您刚才描述的方式来看,它告诉scheme不要将其解释为列表,而将其保留为列表,这或多或少为我解释了scheme中关于同象性的所有内容。