Haskell 创建并 return 变量

Haskell Create and return variable

我是 Haskell 的新手,我在创建和 return 变量方面遇到了一些问题。

实际上我的问题是在函数范围内创建一个变量并将其return。现在我在函数声明中声明了一个空变量,函数将 return 它。

例如我想return nb 的平方根i。因为我不知道如何在范围内创建变量 i,所以我用好的 nb 调用 mySqr,未来的平方根 i 为空。

mySqr :: Int -> Int -> Int
mySqr nb i
    | i * i == nb = i
    | otherwise = mySqr nb (i + 1)

呼叫:mySqr 25 0

它有效,但我希望它更好。

感谢您的帮助。

一个人通常会创建一个局部范围的函数,通常这个函数被命名为 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

这里我们 return 一个 Maybe IntNothing 如果不存在平方根。我们知道平方根不存在,如果i2>n,因为我们只增加i.如果我们找到平方根,我们 return 将它包装在 Just 数据构造函数中。例如:

Prelude> mySqr 0
Just 0
Prelude> mySqr 1
Just 1
Prelude> mySqr 2
Nothing
Prelude> mySqr 3
Nothing
Prelude> mySqr 4
Just 2

当然还有更快的计算平方根的方法。我把它留作练习。