说“解释X”有很多挑战,其中X是一种简单的语言。我认为这太无聊了。为了给互联网上所有拖延的人做一些有趣的事情,您可以尝试做以下挑战:
挑战
选择一种语言$LANG
。$LANG
可以是任何图灵完整的编程语言或图灵完整的子集。请注意,如果您在$LANG
解释中忽略了语言的功能,则也不要在自己的程序中使用它,因为您的提交也必须用编写$LANG
。
写一个编译器/解释器$LANG
编写的$LANG
。您可以使用eval
可用于编写此编译器的所有语言功能(包括和朋友)。为了使任务更具挑战性,存在一个限制:您的程序应该能够解释/编译$LANG
除解释器/编译器本身之外的所有有效程序。如果碰巧要解释/编译的程序是您的解释器或编译器本身(无论文件名如何),则您的程序应该执行与解释器或编译器的功能完全无关的操作(例如,打标或打印Hello, world!
)。
为了使此任务更加复杂,您的程序在编译或解释时不得读取其自身的源代码。
技术指标
- 此任务是代码高尔夫。字符最少的提交是正确的。如果出现平局,则首先提交的解决方案将获胜。
- 您的程序/脚本应从文件读取要解释的程序。您可以硬编码其路径和名称。读取文件后,您可以将文件编译为另一个文件(该文件必须在您的系统上是可执行文件)或直接运行它。如果
$LANG
缺少文件读取功能,则可以选择另一种方式来读取适合的代码$LANG
。您可能没有选择$LANG
作为另一种语言的子集,但已删除了文件读取功能。 - 通常使用代码高尔夫球规则。那就是:如果解决方案使用它变得微不足道(例如定义一个完全实现该解决方案的单字符程序),那么为解决该挑战而编写的个人宠物语言将被禁止。鼓励滥用规则。