有什么方法可以预定义函数的输入值,以便用户不必每次都定义它们?
例如,假设我有一个函数“zr”,它返回一个大小为 n 的列表零,这样:
zr 1 = [0]
zr 5 = [0, 0, 0, 0, 0]
等等。
我目前的实现方式是:
zr :: [Int] -> Int -> [Int]
zr x y
| length x == y = x
| otherwise = zr x++[y]
但这并不是特别优雅,因为每次我调用 zr 我都需要包含一个空列表作为参数:
zr [] 5
有任何想法吗?
谢谢!
最佳答案
我认为您正在寻找的是部分应用程序:
zr' :: Int -> [Int]
zr' = zr []
如果
zr
是一个接受列表和整数的函数,然后 zr []
是一个只接受整数 n
的函数并返回 zr [] n
.在您的情况下,
zr
显然是一个“临时”函数(你不希望任何人意外调用 zr [1] 4
),所以你不妨在本地定义它:zr :: Int -> [Int]
zr = zr' []
where
zr' :: [Int] -> Int -> [Int]
zr' x y
| length x == y = x
| otherwise = zr' x++[0] y
关于haskell - Haskell函数的"Default values"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489443/