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)
您可以解析并提供给编译器,但这很尴尬,因为它是一个字符串而不是结构化术语.