В обычных языках написать
квайн довольно сложно. Умение написать квайн часто отличает суперкрутых программистов от просто крутых.
Квайн — это программа, которая выводит свой исходный код на печать. При этом она не имеет права использовать ввод (иначе всё было бы слишком просто).
Квайн на Немерле выглядит приблизительно так:
#pragma indent
def s = <##pragma indent
def s = <#{0}#>
System.Console.WriteLine(s, s)#>
System.Console.WriteLine(s, s)
Это если не использовать макросы, конечно. Но макросы именно для того и существуют, чтобы упрощать написание самого сложного кода. С макросом-оператором Quine эта задача сводится (как в
HQ9+) к набору одного символа:
using Quine;q
Вот код макроса:
using Nemerle.Compiler;
namespace Quine
{
public macro Quine() syntax ("q")
{
def file = DefaultParser.ReadFile(
Nemerle.Macros.ImplicitCTX().CurrentMethodBuilder.Location.File,
false, true);
def text = file.GetText();
<[ System.Console.WriteLine($(text : string)) ]>
}
}
P. S. это типа шутка