LINUX.ORG.RU
ФорумTalks

А это программа на Haskell, которая выводит программу на Python, которая...


0

0

На ibash.org.ru есть цитата:

--------

blacky: А это программа на Haskell, которая выводит программу на Python, которая выводит программу на Ruby, которая выводит исходную программу на Haskell.

q a b cutStrLn $ b ++ [toEnum 10,'q','(']
++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']
main=q "q a b cutStrLn $ b ++ [toEnum 10,'q','(']
++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']"
"def q(a,b,c)rint b+chr(10)+'q('+repr(+','+repr(c)+','+repr(a)+')'"
"def e( return 34.chr+x+34.chr endef q(a,b,c) print
b+10.chr+'main=q '+e(+' '+e(c)+' '+e(a)+' '+10.chr end"
ettee: я понял свое ничтожество

--------

Решил проверить. Haskell не знаю. Не компилит. Оно и не должно работать?

★★★★★

q a b c = putStrLn $ b ++ [toEnum 10,'q','('] 
++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')'] 
main=q "q a b c = putStrLn $ b ++ [toEnum 10,'q','('] 
++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']" 
"def q(a,b,c)rint b+chr(10)+'q('+repr(+','+repr(c)+','+repr(a)+')'" 
"def e( return 34.chr+x+34.chr endef q(a,b,c) print 
b+10.chr+'main=q '+e(+' '+e(c)+' '+e(a)+' '+10.chr end" 
bose ()
Ответ на: комментарий от bose
def q(a,b,c)rint b+chr(10)+'q('+repr(+','+repr(c)+','+repr(a)+')'
q("def q(a,b,c)rint b+chr(10)+'q('+repr(+','+repr(c)+','+repr(a)+')'","def e( return 34.chr+x+34.chr endef q(a,b,c) print b+10.chr+'main=q '+e(+' '+e(c)+' '+e(a)+' '+10.chr end","q a b c = putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']")

На питоне тоже не компилит... :(

Tanger ★★★★★ ()
Ответ на: комментарий от Tanger

Питон недвусмысленно намекает на наличие там синтаксических ошибок. Мне лень разбираться в подробностях.

GotF ★★★★★ ()
Ответ на: комментарий от GotF

Вы слышите это, Мистер Эндерсон? Это звук шутки, которую Вы не поняли

Gary ★★★★★ ()

В доме, который построил Джек.

breezy ()
Ответ на: комментарий от Rastafarra

Порадовали каменты.

Поставщик странной x...йни. С 1952. Япония.

px ★★★ ()

Поправил. Работает

$ cat test.hs
q a b c = putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']
main=q "q a b c = putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']" "def q(a,b,c): print b+chr(10)+'q('+repr(b)+','+repr(c)+','+repr(a)+')'" "def q(a,b,c) print b+10.chr+'main=q '+34.chr+b+34.chr+' '+34.chr+c+34.chr+' '+34.chr+a+34.chr+10.chr end"
$ runghc test.hs | python | ruby > test.1.hs 
$ diff test.hs test.1.hs 
$ 
kim-roader ★★ ()
Ответ на: комментарий от kim-roader

> runghc test.hs | python | ruby > test.1.hs

интересно, а в можно как нибудь в юникс циклический конвейер

Ну например что-нибудь вроде такого

init_prog |{ first_prog | second_prog | third_prog |}

чтобы он выполнялся как бесконечный ленивый pipe

init_prog | first_prog | second_prog | third_prog | first_prog | second_prog | third_prog .....

А потом вышеуказанную программу запустить в этом бесконечном пайпе

sign ()
Ответ на: комментарий от sign

Как писали Керниган с Пайком в http://werc.homelinux.net/links/reference_material/unix_prog_design.pdf

Growth is easy when the functions are well separated.

Этим они намекали, что если тебе нужна ткая функциональность, то ты можешь её реализовать изменив, скажем, код bash, или написав программу, которая принимает такой конвеер строкой, как аргумент и разворачивает в

mkfifo pipe0
mkfifo pipe1

`take_first_command` > pipe0
`take_next_command` < pipe0 > pipe1
`take_next_command` < pipe1 > pipe0
`take_next_command` < pipe0 > pipe1
...

Или иной подобный код

kim-roader ★★ ()
Ответ на: комментарий от kim-roader

Деревья можно строить при помощи

cat data | tee >(tar -xf - | cat) >(cat) | cat > data
kim-roader ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.