Haskell,第n次返回char

时间:2018-10-21 20:09:23

标签: haskell recursion

我正在尝试使用带有两个参数的递归在haskell中创建一个函数。 该函数接受一个char和一个整数,并将根据整数整数n次返回char。

预先感谢

1 个答案:

答案 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)