programming-languages - 有助于编写 quines(自打印程序)的语言功能?

标签 programming-languages language-design quine

好吧,对于那些从未遇到过这个词的人来说, quine 是一个“ self 复制”的计算机程序。更具体地说,它在执行时会生成自己的源代码副本作为其唯一输出。

当然,可以使用多种编程语言(但不是全部)开发 quines;但是有些语言显然比其他语言更适合产生蒯躅(要清楚地理解听起来有点主观的“更适合”,请查看 Haskell example vs. C example in the Wiki page - 我在下面提供了我更客观的定义)。

我的问题是,从编程语言的角度来看,哪些语言特性(无论是理论设计还是语法糖)使该语言更适合/有助于编写 quines

我对“更合适”的定义是“quines 更容易编写”和“更短/更易读/更少混淆”。但欢迎您添加更多至少有点客观的标准。

请注意,这个问题明确排除了退化的情况,比如一种旨在包含“print_a_quine”原语的语言。

最佳答案

我不是很确定,所以如果你们中的任何人知道得更多,请指正我。 我同意其他两个答案,进一步解释说,蒟蒻是这样的:

Y g

其中 Y 是 Y fixed-point combinator (或任何其他定点组合器),这意味着在 lambda calculus :

Y g = g(Y g)

现在,很明显,我们需要代码是数据,g 是一个函数,它将打印它的参数。

总而言之,我们需要构造这样一个 quines 函数、打印函数、定点组合器和按名称调用评估策略。

满足此条件的最小语言是来自 Iota and Jot 的 AFAIK Zot家庭。

关于programming-languages - 有助于编写 quines(自打印程序)的语言功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077541/

相关文章:

c - 这个自输出的C程序是如何工作的?

vba - 丢失的 quines : Visual Basic (for Applications)

programming-languages - 有哪些不同的编程语言概念以及哪些语言以纯粹的方式展示它们

python - Python 作为系统和应用程序编程语言流行的主要原因是什么?

ios - 我怎样才能正确地做 For 循环

python - 为什么切片和范围上限是排他的?

actionscript-3 - 为什么属性在接口(interface)中不可声明

haskell - 如何模仿懒惰

java - 为什么Java中没有多重继承,却允许实现多个接口(interface)?

c - 为什么 Ken Thompson 在 "Reflections on Trusting Trust"中提到的 C quine 不起作用?