Кўайн на хаскеле

Как правило, я не умею писать их. И не считается, что Haskell — это какой-то тяжёлый язык для написания на нём кўайна. Но всё же приведу его:

module Main where magic s = s ++ show s main = putStrLn s s = magic "module Main where\nmagic s = s ++ show s\nmain = putStrLn s\ns = magic "

Для точности и красоты вывода в консоль файл должен заканчиваться пустой строкой.

Комментарии: сначала я думал написать magic так, чтобы она заменяла, скажем, '#' в своём аргументе s на show s, но в лени найти, где же такую замену недорого купить, решил, что пускай сама строка будет последней в файле. Это даже имеет какую-то неуловимую приятность.

Разумеется, вместо s ++ show s можно было бы написать какой-нибудь concatMap escape, убив сразу и зайца '#', но… (Заметьте, краткости я тоже не преследовал, иначе бы постарался сделать что-то типа такого: module Main where;m s=s++show s;main=putStrLn s;s=m"module Main where;m s=s++show s;main=putStrLn s;s=m".)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

:) :D :( :E: ;) :yes: :no: :donno: more »