LINUX.ORG.RU
ФорумTalks

Дом который построил Джек

 ,


2

3

Навеянно топиком о указателях, может ли кто нибудь описать стихотворение сабжа на каком либо ЯП что бы максимально показать взаимодействие и вложенность объектов/структур?

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

А это пшеница, Которая в темном чулане хранится В доме, Который построил Джек.

... Вот два петуха, Которые будят того пастуха, Который бранится с коровницей строгою, Которая доит корову безрогую, Лягнувшую старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джек.

P.S. сам я не программист.

★★★★★

Последнее исправление: splinter (всего исправлений: 2)

Для написания подобных стихотворений уже давно специальный язык придумали. Лиспом зовётся.

dogbert ★★★★★
()

для этого даже самый убогия язык подойдет

XML называется

Deleted
()

я тут повтыкал-повтыкал в стихотворение, написать программу на лиспе, которая его выводит, будет трудно из-за различных родов/единственного-множественного числа (котрый/которая/которые), чередования «а это/вот» без четкой системы

оригинал в этом плане намного проще:

This is the house that Jack built.

This is the malt
That lay in the house that Jack built.

This is the rat,
That ate the malt
That lay in the house that Jack built.

This is the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the cow with the crumpled horn,
That tossed the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the cock that crowed in the morn,
That waked the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built.

This is the farmer sowing his corn,
That kept the cock that crowed in the morn,
That waked the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog,
That worried the cat,
That killed the rat,
That ate the malt
That lay in the house that Jack built. 

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

да ладно, пятница только начинается :-)

splinter ★★★★★
() автор топика

может ли кто нибудь описать стихотворение сабжа на каком либо ЯП

ни в коем случае не читай индийских сказок!

static_lab ★★★★★
()
house = { "Вот дом", "Который построил Джек." }
wheat = { "А это пшеница", "Которая в тёмном чулане хранится\nВ доме", house }
bird = { "А это весёлая птица-синица", "Которая часто ворует пшеницу", wheat }
cat = { "Вот кот", "Который пугает и ловит синицу", bird }
dog = { "Вот пёс без хвоста", "Который за шиворот треплет кота", cat }
cow = { "А это корова безрогая", "Лягнувшая", "Лягнувшую", " старого пса без хвоста", dog }
starushka = { "А это старушка, седая и строгая", "Которая доит корову безрогую", cow }
herdsman = { "А это ленивый и толстый пастух", "Который бранится с коровницей строгую", starushka }
pituh = { "Вот два петуха", "Которые будят того пастуха", herdsman }

function intro(object)
	return object[1] .. ",\n" .. generate(object, true) 
end

function generate(object, after_intro)
	local def = (after_intro or type(object[3]) ~= "string") and object[2] or object[3]
	if type(object[4]) == "string" then def = def .. object[4] end
	return def .. (object[3] and ",\n" .. generate(object[#object]) or "")
end

function genall(object, last_line)
	return (object[3] and genall(object[#object]) or "") .. intro(object) .. (last_line and "" or "\n\n")
end

print(genall(pituh, true))

На. Проверено на Lua 5.2. Правда, я не знаю, чему на этом примере можно кого-то научить, но если генерировать из более-менее наглядной синтаксической структуры, то на русском языке генератор получится такой, что чёрт ногу сломит.

...конечно, выражения типа object[3] and genall(object[#object]) требуют определённых комментариев, но для краткости...

...и наглядно не-программист тут ничего не поймёт...

Ну ладно, ладно, признаю, это совершенно бесполезный для обучения быдлокод.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 3)

вод, зацените шедевр, продукт неведомого упорина :)

(setq JB
  '(
    ("farmer sowing his corn" "kept")
    ("cock that crowed in the morn" "waked")
    ("priest all shaven and shorn" " married")
    ("man all tattered and torn" "kissed")
    ("maiden all forlorn" "milked")
    ("cow with the crumpled horn" "tossed")
    ("dog" "worried")
    ("cat" "killed")
    ("rat" "ate")
    ("malt" "lay in")
    ("house" nil)
  )
)

(defun That (L)
  (cond 
    ((null (car(cdr (car L)))) "That Jack built.")
    (t (format nil "That ~A the ~A,~%~A" (car (cdr (car L))) (car (car (cdr L))) (That (cdr L)) ))
  )
)

(defun Jackbuilt (L)
  (cond 
    ((null L) nil)
    (t  (format nil "~A~A" (Jackbuilt (cdr L))  (format nil   "This is the ~A  ~%~A ~%~%" (car (car L))  (That L) )))
  )
) 

(Jackbuilt JB)
Harald ★★★★★
()
Ответ на: комментарий от zinfandel

просто вложенность показать

splinter ★★★★★
() автор топика

Haskell sila lisp mogila

data Jacks = J {
  jIntro      :: String
, jReferenced :: String
, jAction     :: Action
} deriving (Eq, Show)


data Action = A String Jacks | E String
              deriving (Eq, Show)

house    = J "Вот дом"                         "\nВ доме"           (E "Который построил Джэк.")
wheat    = J "А это пшеница"                   "пшеницу"            (A "Которая в темном чулане хранится" house)
bird     = J "А это веселая птица-синица"      "синицу"             (A "Которая часто ворует" wheat)
cat      = J "Вот кот"                         "кота"               (A "Который пугает и ловит" bird)
dog      = J "Вот пес без хвоста"              "пса без хвоста"     (A "Который за шиворот треплет" cat)
cow      = J "А это корова безрогая"           "корову безрогую"    (A "Лягнувшая старого" dog)
granny   = J "А это старушка, седая и строгая" "коровницей строгою" (A "Которая доит" cow)
cowboy   = J "А это ленивый и толстый пастух"  "того пастуха"       (A "Который бранится с" granny)
roosters = J "Вот два петуха"                  ""                   (A "Которые будят" cowboy)

expand :: Jacks -> [String]
expand j = (jIntro j ++ ",\n" ++ expandAction (jAction j) ++ "\n") : expandNext
  where
    expandAction a = case a of
        E s    -> s
        A s j' -> s ++ " " ++ jReferenced j' ++ ",\n" ++ expandAction (jAction j')
    expandNext = case (jAction j) of
        E _    -> []
        A _ j' -> expand j'

houseJackBuilt = unlines $ reverse (expand roosters)

Выхлоп

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

А это пшеница,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

А это веселая птица-синица,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

Вот кот,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

Вот пес без хвоста,
Который за шиворот треплет кота,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

А это корова безрогая,
Лягнувшая старого пса без хвоста,
Который за шиворот треплет кота,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

А это старушка, седая и строгая,
Которая доит корову безрогую,
Лягнувшая старого пса без хвоста,
Который за шиворот треплет кота,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

А это ленивый и толстый пастух,
Который бранится с коровницей строгою,
Которая доит корову безрогую,
Лягнувшая старого пса без хвоста,
Который за шиворот треплет кота,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

Вот два петуха,
Которые будят того пастуха,
Который бранится с коровницей строгою,
Которая доит корову безрогую,
Лягнувшая старого пса без хвоста,
Который за шиворот треплет кота,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится 
В доме,
Который построил Джэк.

Лень фиксить склонение действий коровы.

yoghurt ★★★★★
()
Последнее исправление: yoghurt (всего исправлений: 2)
Ответ на: Haskell sila lisp mogila от yoghurt

BTW, haskell-mode скатился в говно какое-то. Заменяет, понимаете ли, расово верные :: на бгмерзские , -> на , да так, что ghci потом отказывается это есть :(

yoghurt ★★★★★
()

наркоманов тред.

круто.

dada ★★★★★
()

я думаю на 1с будет хорошо смотрется)

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

я уж подумал что это исходник лиспа

:-D ТС забыл тэг «вещества».

Deleted
()

А вот версия на sh

#!/bin/sh
wget --quiet -O - 'http://lib.ru/POEZIQ/MARSHAK/marshak2.txt_Ascii.txt' | iconv --from-code=koi8-r marshak2.txt_Ascii.txt | sed -n '2559,2628p'

Самая короткая версия, только требует подключения к интернету.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.