История изменений
Исправление yoghurt, (текущая версия) :
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, :
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, :
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)
Выхлоп
Вот дом, Который построил Джэк. А это пшеница, Которая в темном чулане хранится В доме, Который построил Джэк. А это веселая птица-синица, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк. Вот кот, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк. Вот пес без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк. А это корова безрогая, Лягнувшая старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк. А это старушка, седая и строгая, Которая доит корову безрогую, Лягнувшая старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк. А это ленивый и толстый пастух, Который бранится с коровницей строгою, Которая доит корову безрогую, Лягнувшая старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк. Вот два петуха, Которые будят того пастуха, Который бранится с коровницей строгою, Которая доит корову безрогую, Лягнувшая старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в темном чулане хранится В доме, Который построил Джэк.
Лень фиксить склонение действий коровы.