【发布时间】:2011-05-30 10:37:18
【问题描述】:
我有以下功能:
convertToStr :: [Int] -> String
convertToStr [] = []
convertToStr (int:ints)
| length (int:ints) == 1 = ((show (head (drop 0 (int:ints)))) ++ ", ")
| length (int:ints) == 2 = ((show (head (drop 0 (int:ints)))) ++ ", ") ++ ((show (head (drop 1 (int:ints)))) ++ ", ")
从上面可以看出,我已经设法从这个输入中得到以下输出:
> convertToStr [3,5]
"3, 5, "
然而,我似乎对能够编写递归定义感到困惑。我想将[Int] 元素中任意长度的列表转换为具有该列表的字符串,并且不对其进行限制。
【问题讨论】:
-
请意识到
drop 0基本上什么都不做。它需要一个列表,并从中删除 0 个元素。此外,您应该尝试更适应pattern matching。 -
这听起来像是功课;基本思想是转换第一个数字,然后使用递归来转换其余的。