Haskell печатный факториал
Я только начал программировать на Haskell, в основном потому, что искал более математически мощный язык, чем C#, и сейчас я очень растерялся.
Прямо сейчас я пытаюсь просто найти факториал 4 и напечатать это, вот что я написал до сих пор:
fact n = product [1..n]
main = do
print fact 4
Когда я пытаюсь отладить его, я получаю
Ошибка:(3, 8) ghc: не удалось найти ожидаемый тип
a1 -> t0' with actual type
IO ()'Функция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)))