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

当然,可以用许多编程语言(但不是全部)开发这些奎因;但是,有些语言显然比其他语言更适合于生产奎因(清楚地理解有些主观的“更适合”,请看一下 Haskell示例与Wiki页面中的C示例 - 我在下面提供了我的目标定义)。

我的问题是, 从编程语言的角度来看,哪些语言特征(理论设计或语法糖)使语言更合适/有助于编写Quines?

我对“更合适”的定义是“ Quines更容易写”,并且“更短/更可读/更少混淆”。但是,欢迎您添加至少有些客观的更多标准。

请注意,此问题明确排除了堕落的案例,例如一种旨在包含“ print_a_quine”原始的语言。

有帮助吗?

解决方案

我不确定,如果你们中的任何人都知道的话,请纠正我。我同意其他两个答案,进一步解释了quine就是这样:

y g

y是一个 y定点组合器 (或任何其他固定点组合器),这意味着 lambda演算:

y g = g(y g)

现在,很明显,我们需要代码为数据,并且g是打印其参数的函数。

因此,总而言之,我们需要构建此类Quines功能,打印功能,固定点组合器和呼叫评估策略。

满足这种情况的最小语言是Afaik zot Iota和Jot 家庭。

其他提示

喜欢的语言 IO编程语言 其他人则允许将代码视为数据。在树步行系统中,这通常允许语言实施者将抽象语法树公开为一流的公民。就IO而言,这就是它的作用。以对象为导向,AST是围绕消息对象建模的,并创建了一个特殊的前哨以表示当前执行的消息。这个哨兵被称为 thisMessage. thisMessage 是像其他任何人一样的完整信息,并回应 print 消息,将其打印到屏幕上。结果,我曾经用任何语言生产的最短quine来自IO,看起来像这样:

thisMessage print

无论如何,我只是忍不住就这个主题与您分享。以上当然会使写作Quines变得容易,但是不这样做的方式肯定并不能轻易地产生Quine。

我不确定从实际角度来看,这是否是有用的答案,但是有一些有用的理论 计算理论. 。特别是固定点和 克莱恩的递归定理 可用于写quines。显然,该理论可用于在LISP中编写Quine(如Wikipedia页面所示)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top