同性恋究竟是什么意思?

Tow*_*wer 20 theory programming-languages terminology homoiconicity

我试图理解关于同性恋维基百科文章,但它太冗长,并没有简明扼要地解释这个词背后的主要理论.我应该补充一点,我不是母语为英语的人,所以我更喜欢简单的英语而不是学术白皮书.

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

小智 11

它意味着"代码作为数据",这是Lisp系列的一般特征.

(add 2 3)
Run Code Online (Sandbox Code Playgroud)

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


Fre*_*Foo 10

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

'(define (foo x) (* x x))
Run Code Online (Sandbox Code Playgroud)

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

(define (foo x) (* x x))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 很有意思。在学校里,我们了解到引号只是在方案中定义列表的另一种方式,但是按照您刚才描述的方式查看它 - 它告诉方案不要解释它并将其保留为列表 - 或多或少解释了现在关于我计划中的同像性的一切。 (2认同)