Haskell печатный факториал

Я только начал программировать на Haskell, в основном потому, что искал более математически мощный язык, чем C#, и сейчас я очень растерялся.

Прямо сейчас я пытаюсь просто найти факториал 4 и напечатать это, вот что я написал до сих пор:

fact n = product [1..n]
main = do
   print fact 4

Когда я пытаюсь отладить его, я получаю

Ошибка:(3, 8) ghc: не удалось найти ожидаемый тип a1 -> t0' with actual typeIO ()'Функция print' is applied to two arguments, but its type(a0 -> a0) -> IO ()'имеет только один элемент в блоке' do ': print fact 4 В выражении: do { print fact 4 }

Что я делаю неправильно?

1 ответ

Решение

Вам нужны скобки:

main = do
    print (fact 4)

Что видит GHC fact а также 4 передаваться в качестве отдельных аргументов print, но вы хотите подать заявку 4 в factзатем примените этот результат к print, Вы также можете использовать

main = do
    print $ fact 4

$ Оператор ничего не делает сам по себе, но у него очень низкий приоритет, например, как + имеет более низкий приоритет, чем *, и это ассоциируется справа, так что вы можете написать что-то вроде

f $ g . h $ m 1 $ 2 + 3

Вместо

f ((g . h) (m 1 (2 + 3)))
Другие вопросы по тегам