haskell - Haskell函数的"Default values"?

标签 haskell

有什么方法可以预定义函数的输入值,以便用户不必每次都定义它们?

例如,假设我有一个函数“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/

相关文章:

haskell - 按类型打印数据类型的结构

haskell - 匿名函数的范围可见性

haskell - Haskell 中有自定义预处理器的示例吗?

haskell - Haskell 有没有通用的方法来告诉函数的参数数量?

oop - 为什么 Haskell 代数数据类型是 "closed"?

haskell - 在haskell中查找行内的单词

haskell - 处理 IO 与 Haskell 中的纯代码

haskell - Project Euler 50 : Algorithm is incredibly slow, 无法理解原因

haskell - 在 Haskell 中使用幻像类型验证程序的正确性

haskell - 特设多态函数