Haskell—将[char]拆分为字符串的函数

Haskell—将[char]拆分为字符串的函数,haskell,Haskell,我想要一个函数,可以将数组转换成字符串,同时在其中输入一些新行 基本上,假设我有这个列表:[1234567890] 我希望将其与整数一起传递,并将该列表作为字符串返回,其格式如下: (如果Int为5,则为) 我想我可以做一些类似的事情: split :: Int -> [char] -> String split n (x:xs) = split (take n-1 (x:xs)) -- I'm trying to make this recursive 我还要假设数组的长度可以被

我想要一个函数,可以将数组转换成字符串,同时在其中输入一些新行

基本上,假设我有这个列表:[1234567890] 我希望将其与整数一起传递,并将该列表作为字符串返回,其格式如下:

(如果Int为5,则为)

我想我可以做一些类似的事情:

split :: Int -> [char] -> String
split n (x:xs) = split (take n-1 (x:xs)) -- I'm trying to make this recursive

我还要假设数组的长度可以被我传入的Int整除。

要做到这一点,你必须进行
拆分
递归,但在递归步骤中,它没有收到相同数量的参数,你试图传递部分参数。
n
可以在每个步骤中保持不变,当您在每个步骤中将n从列表中删除时,您还必须在其余步骤中删除这些
n
元素

splitN _ [] = ""
splitN n l = (take n l) ++ "\n" ++ (splitN n $ drop n l)

要做到这一点,您必须使
split
递归,但在递归步骤中,它没有收到相同数量的参数,并且您尝试传递部分参数。
n
可以在每个步骤中保持不变,当您在每个步骤中将n从列表中删除时,您还必须在其余步骤中删除这些
n
元素

splitN _ [] = ""
splitN n l = (take n l) ++ "\n" ++ (splitN n $ drop n l)

不清楚你想做什么。
Char
的列表已经是
String
(这就是
String
的字面定义),但是您的输出示例显示了两个字符串,而不是一个。我基本上只想格式化列表。如果有一种方法可以输出两个字符串,那就太好了,我也在考虑尝试在上面定义的长度末尾加上一个\n字符。我不明白预期的输出类型是什么:如果您想只返回两个字符串,请使用
…->(字符串,字符串)
。如果要返回多个,请使用
…->[String]
。不清楚您想做什么。
Char
的列表已经是
String
(这就是
String
的字面定义),但是您的输出示例显示了两个字符串,而不是一个。我基本上只想格式化列表。如果有一种方法可以输出两个字符串,那就太好了,我也在考虑尝试在上面定义的长度末尾加上一个\n字符。我不明白预期的输出类型是什么:如果您想只返回两个字符串,请使用
…->(字符串,字符串)
。如果要返回多个,请使用
…->[String]
。这与OP的类型不匹配signature@FyodorSoikin好的,在你对这个问题的评论之后我看到了。好的,谢谢。我很感谢你的评论!但我的输出看起来像“12345\n67890”。你还有其他想法吗?split函数的顶部看起来像split::Int->[Char]->[Char]它看起来像这样,因为ghci只是像那样显示\n字符。当您真正打印输出时,您会看到格式化的输出,例如
putStrLn(splitN 5“1234567890”)
。现在这真的取决于你想用它做什么。啊,是的,谢谢你@Donttry,我真的很感谢你的帮助!这与OP的类型不匹配signature@FyodorSoikin好的,在你对这个问题的评论之后我看到了。好的,谢谢。我很感谢你的评论!但我的输出看起来像“12345\n67890”。你还有其他想法吗?split函数的顶部看起来像split::Int->[Char]->[Char]它看起来像这样,因为ghci只是像那样显示\n字符。当您真正打印输出时,您会看到格式化的输出,例如
putStrLn(splitN 5“1234567890”)
。现在这真的取决于你想用它做什么。啊,是的,谢谢你@Donttry,我真的很感谢你的帮助!