Nemerle в действии: квайн-оператор
От: catbert  
Дата: 13.12.11 17:48
Оценка: 9 (2)
В обычных языках написать квайн довольно сложно. Умение написать квайн часто отличает суперкрутых программистов от просто крутых.
Квайн — это программа, которая выводит свой исходный код на печать. При этом она не имеет права использовать ввод (иначе всё было бы слишком просто).

Квайн на Немерле выглядит приблизительно так:
#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. это типа шутка
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.