String 当'时给出递归定义;显示';ing&x27;字符串';元素

String 当'时给出递归定义;显示';ing&x27;字符串';元素,string,list,haskell,String,List,Haskell,我有以下功能: 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 (h

我有以下功能:

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]
元素中任意长度的列表转换为具有该列表的字符串,并且不受限制。

如果没有显式递归,您可以使用
映射
这样做

convertToString :: [Int] -> String
convertToString = concat . (intersperse ", ") . map show
编辑:手动递归就像

cts [] = ""
cts (x:xs)
   | null xs = show x 
   | otherwise = show x ++ ", " ++ cts xs

如果没有显式递归,您可以使用
map
这样做

convertToString :: [Int] -> String
convertToString = concat . (intersperse ", ") . map show
编辑:手动递归就像

cts [] = ""
cts (x:xs)
   | null xs = show x 
   | otherwise = show x ++ ", " ++ cts xs

首先,你的功能有点混乱。我建议您为您的任务查看一些库函数。我建议,它需要一个列表(字符串)列表,在它们之间放置一些东西(如
,“
)并将它们连接起来。

首先,您的函数有点混乱。我建议您为您的任务查看一些库函数。我建议,这需要一个列表(字符串)列表,在它们之间放置一些东西(如
,“
)并将它们连接起来。

请务必意识到
drop 0
基本上没有任何作用。它获取一个列表,并从中删除0个元素。另外,你应该试着让自己更舒服一些;基本思想是转换第一个数字,然后使用递归转换其余的数字。请务必意识到
drop 0
基本上不起任何作用。它获取一个列表,并从中删除0个元素。另外,你应该试着让自己更舒服一些;基本思想是转换第一个数字,然后使用递归转换其余数字。使用这种方法,我个人更喜欢模式匹配
[x]
,而不是使用
null xs
保护。使用这种方法,我个人更喜欢模式匹配
[x]
而不是使用
null xs
保护。