#haskell #recursion
#haskell #рекурсия
Вопрос:
Я новичок в haskell. Не хочу использовать какую-либо библиотечную функцию, изучая язык.
Я пытаюсь написать рекурсивную функцию, чтобы определить, является ли число идеальным квадратом. Но функция выдает ошибку типа. Не знаю, что я делаю не так.
perfectSq' n y = if (n*n) == y then True else if n == 0 then False else perfectSq' n-1 y
• Couldn't match type ‘t -> Bool’ with ‘Bool’
Expected type: t -> Bool
Actual type: t -> t -> Bool
• Relevant bindings include
perfectSq' :: t -> Bool
Ответ №1:
Выражение perfectSq' n-1 y
компилируется как (perfectSq' n) - (1 y)
— то есть приложение функции связывается сильнее, чем оператор минус.
Вам нужно добавить круглые скобки, чтобы помочь компилятору с правильным порядком операций:
perfectSq' (n-1) y