Как решить задачу о быках, коровах и телятах на Haskell?

Бык стоит 10 рублей, корова - 5 рублей, телёнок - 0.5 рублей. Необходимо на 100 рублей купить 100 голов скота. Мне стало интересно, как такую задачу решить в Haskell? В императивных языках задача решается через вложенные циклы, но в Haskell их нет. Сколько ни пытался, решить задачу не смог.


Ответы (1 шт):

Автор решения: isnullxbh

Код:

main :: IO ()
main = do
    print [(b, k, c) |
        b <- [1..10],
        k <- [1..20],
        c <- [1..200],
        (\x y z ->
             10 * x + 5 * y + 0.5 * z == 100 && x + y + z == 100)
        b k c]

Пояснения:

  1. 10 * x + 5 * y + 0.5 * z == 100 - предикат для проверки общей стоимости скота
  2. x + y + z == 100 - предикат для проверки общей численности скота

P.S. В Haskell новичек, прошу за код сильно не ругать.

→ Ссылка