问题标签 [homoiconicity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lisp - Lisp 灵活性的实际例子?
有人试图向我推销 Lisp,作为一种超级强大的语言,它可以做任何事情,然后是一些。
是否有Lisp 强大功能的实际代码示例?
(最好与以常规语言编码的等效逻辑一起使用。)
macros - 是什么让 Lisp 宏如此特别?
阅读Paul Graham关于编程语言的文章会认为Lisp 宏是唯一的出路。作为一个忙碌的开发人员,在其他平台上工作,我没有使用 Lisp 宏的特权。作为一个想了解嗡嗡声的人,请解释一下是什么让这个功能如此强大。
还请将此与我从 Python、Java、C# 或 C 开发领域理解的内容联系起来。
functional-programming - 我在哪里可以获得更多关于同音性的信息?
我一直在尝试函数式编程,但我仍然不理解这个概念。你们知道任何讨论这个概念的好书、教程或例子吗?或者,如果您可以展示有关其用法的小片段,那就太好了。
compiler-construction - 编译语言可以是谐音的吗?
根据定义,同音字的意思是:
代码和数据的相同表示
在 LISP 中,这意味着您可以有一个带引号的列表并对其进行评估,(car list)
函数和(cdr list)
参数也是如此。这可以在编译时或运行时发生,但是它需要一个解释器。
没有编译时解释器的编译语言是否也可以是同音的?还是同音性的概念仅限于口译员?
reflection - 遍历 Scheme 函数作为列表
是否可以将 Scheme 中的函数视为任何其他列表?
基本上,我想做的是这样的:
我发现了一个类似的讨论,如果这在 Scheme 中是不可能的,我会感到有点失望。如果是这样,为什么这是不可能的?其他lisps有可能吗?
编辑:将 (cdr 'foo) 更改为 (cdr foo) - 它具有误导性。我在问,为什么我不能以列表的形式访问函数?
xml - XML 元模式
由于 XML 模式(XSD)本身就是 XML 文件,所以应该可以构建模式的模式(元模式),对吧?
我正在努力实现这一壮举。
我想创建一个模式来描述一个模式,其中一个根complexType
包含一系列simpleTypes
.
sql - 同音性和 SQL
我目前正在使用 emacs sql-mode 作为我的 sql shell,一个(简化的)查询响应如下:
如果我想根据该数据制定另一个查询,例如
您会看到我必须在visit_key
and之间添加逗号created
,并用引号将到期值括起来。
是否有一个 SQL DB shell 可以更一致地显示其内容,以便我可以最大限度地减少这种编辑?例如
或者
我正在使用 postgresql 顺便说一句。
functional-programming - 是否有任何将函数视为可以操作的数据结构的编程语言?
我编写了以下函数作为我正在开发的 jQuery 插件的一部分:
在测试了一个高度依赖的高度递归函数后.append2
,我优化.append2
为:
虽然这段代码在速度方面效率更高,但它仍然让我不满意。本质上,我已经两次定义了相同的函数:
我想知道是否有任何语言可以让我只定义一次函数:
然后通过将参数替换为$this.append
from value
to 对其进行操作callback(key, value)
。(而且,不,不是通过操纵字符串。通过操纵函数本身。)
有没有这样的编程语言?
programming-languages - 同音性究竟是什么意思?
我试图理解Wikipedia 关于 homoiconity 的文章,但它太冗长,并没有简明地解释这个词背后的主要理论。我应该补充一点,我不是以英语为母语的人,所以我更喜欢简单的英语而不是学术白皮书的引用。
那么,如果一种语言是谐音的,这到底意味着什么?是什么让 C#、Java 或 JavaScript 非谐音?
types - 同音型理论
Lisp 具有同义性的特性,也就是说,语言实现(列表)使用的代码表示也可用于想要为自己的目的表示代码的程序,并且惯用地使用它们。
另一个主要的函数式编程语言家族,ML,是基于类型论的,这意味着语言实现需要更复杂的代码表示,而且你可以做的事情也不太随意,所以通常内部表示是不适用于程序。例如,高阶逻辑的证明检查器通常在 ML 家族语言中实现,但通常实现自己的类型理论系统,有效地忽略了 ML 编译器已经拥有一个这一事实。
有没有例外?任何基于类型理论的编程语言都公开其代码表示以供编程使用?