【发布时间】:2018-07-20 09:29:21
【问题描述】:
编写递归 Haskell 函数
makeString :: Int -> Char -> Char -> String
使得makeString n ch1 ch2 返回如下字符串:
- 当 n 为正数时,字符串长度为 3n-2,包含 n 个副本 ch1,每个副本由 ch2 的两个副本分隔。
- 当n小于等于0时,字符串为空字符串。
例如,该函数具有以下行为:
Main > makeString 5 'a' '!'
"a!!a!!a!!a!!a"
Main > makeString 1 'a' '!'
"a"
Main > makeString 10 '6' '#'
"6##6##6##6##6##6##6##6##6##6"
到目前为止,我有:
makeString :: Int -> Char -> Char -> String
makeString n ch1 ch2
|n <= 0 = [ ]
|otherwise = ch1: makeString(3*n-2)(ch2)(ch1)
Main> makeString 5 'a' '!'
"a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a"
【问题讨论】:
-
你为什么要用
n = 3*n-2递归调用你的函数?这样做的目的是什么? -
有人告诉我使用 3n-2,所以我认为这就是意思。
-
老实说,我只是尝试了任何东西,因为它没有任何意义。
-
一些固定的代码看起来更好,但仍然不存在。系列 :: Int -> Int -> [Int] 系列 n 项 | n [[Int]] doubleCount n |n [[Int]] helper i |i > n = [ ] |otherwise = (series in) : helper(i+1)
-
给我:*Main> doubleCount 6 [[6],[6,6],[6,6,6],[6,6,6,6],[6,6, 6,6,6],[6,6,6,6,6,6]]