Обычно создается локальная функция, часто этой функции присваивается имя go
:
mySqr :: Int -> <b>Maybe</b> Int
mySqr n = <b>go 0</b>
where <b>go</b> i | i2 > n = Nothing
| i2 == n = Just i
| otherwise = go (i+1)
where i2 = i*i
Здесь мы возвращаем Maybe Int
, то есть Nothing
, если квадрат не существует root , Мы знаем, что квадрат root не существует, если i 2 > n , поскольку мы увеличиваем только i . Если мы найдем квадрат root, мы вернем его здесь, завернутый в Just
конструктор данных. Например:
Prelude> mySqr 0
Just 0
Prelude> mySqr 1
Just 1
Prelude> mySqr 2
Nothing
Prelude> mySqr 3
Nothing
Prelude> mySqr 4
Just 2
Конечно, есть более быстрые способы вычисления квадрата root. Я оставляю это как упражнение.