语言功能有助于编写quines(自我打印程序)?
-
28-09-2019 - |
题
好的,对于那些从未遇到过这个词的人 quine 是“自我复制”计算机程序。更具体地说,在执行后,它会产生其自己的源代码的副本,作为其唯一的输出。
当然,可以用许多编程语言(但不是全部)开发这些奎因;但是,有些语言显然比其他语言更适合于生产奎因(清楚地理解有些主观的“更适合”,请看一下 Haskell示例与Wiki页面中的C示例 - 我在下面提供了我的目标定义)。
我的问题是, 从编程语言的角度来看,哪些语言特征(理论设计或语法糖)使语言更合适/有助于编写Quines?
我对“更合适”的定义是“ Quines更容易写”,并且“更短/更可读/更少混淆”。但是,欢迎您添加至少有些客观的更多标准。
请注意,此问题明确排除了堕落的案例,例如一种旨在包含“ print_a_quine”原始的语言。
其他提示
喜欢的语言 IO编程语言 其他人则允许将代码视为数据。在树步行系统中,这通常允许语言实施者将抽象语法树公开为一流的公民。就IO而言,这就是它的作用。以对象为导向,AST是围绕消息对象建模的,并创建了一个特殊的前哨以表示当前执行的消息。这个哨兵被称为 thisMessage
. thisMessage
是像其他任何人一样的完整信息,并回应 print
消息,将其打印到屏幕上。结果,我曾经用任何语言生产的最短quine来自IO,看起来像这样:
thisMessage print
无论如何,我只是忍不住就这个主题与您分享。以上当然会使写作Quines变得容易,但是不这样做的方式肯定并不能轻易地产生Quine。
我不确定从实际角度来看,这是否是有用的答案,但是有一些有用的理论 计算理论. 。特别是固定点和 克莱恩的递归定理 可用于写quines。显然,该理论可用于在LISP中编写Quine(如Wikipedia页面所示)。