我正在尝试使用带有两个参数的递归在haskell中创建一个函数。 该函数接受一个char和一个整数,并将根据整数整数n次返回char。
预先感谢
答案 0 :(得分:4)
首先,函数是从一种类型到另一种类型以及从一种值到另一种类型的映射。列表和Data.Map
也是映射,就像函数一样。这意味着您可以列举所有可能的情况来定义函数。让我们这样做,看看是否出现模式:
rep :: Char -> Int -> [Char]
rep x 0 = [] --Something repeated zero times is an empty list
rep x 1 = [x] --Something repeated one time is a list with one entry
rep x 2 = [x, x]
rep x 3 = [x, x, x]
rep x 4 = [x, x, x, x]
看到图案了吗?
rep x 0 = []
rep x n = x : (rep x $ n - 1)
Aaa,这是您的职责!
请注意,这不仅适用于Char
的任何类型,因此我们可以更改类型签名:
rep :: a -> Int -> [a]
如果n < 0
怎么办?现在,Haskell将进入无限循环尝试执行此操作:
x : (x : (x : (x : (...))))
我们该如何解决?您可以只返回一个空列表,例如:
rep x n = if n <= 0 then [] else x : (rep x $ n - 1)