基本上我正在尝试执行一个函数,在这个函数中给出一个列表和一个数字,你必须将列表拆分为与给定数字大小相同的列表,并且所有列表的最后一次拆分的长度都应该低于给定的数字
separa a xs = if length xs >= a then separaM a (drop a xs) ([take a xs]) else [xs]
separaM a xs yss = if length xs >= a then separaM a (drop a xs) (yss : (take a xs)) else separaM a [] (yss : xs)
separaM a [] yss = yss
Run Code Online (Sandbox Code Playgroud)
我希望3"comovais"的输出为["com","ova","is"]但是在我的程序中由于错误而没有输出
注意表达式:
yss : (take a xs)
Run Code Online (Sandbox Code Playgroud)
(take a xs)有类型[b],所以yss有类型b.但是当你yss : (take a xs)作为参数传递给separaM函数时,yss预期类型[b]不是b.这就是错误发生的原因.
实际上,您不需要yss存储结果,递归函数可以定义为:
separaM _ [] = []
separaM a xs = (if length xs >= a then (take a xs) else xs) :
separaM a (drop a xs)
Run Code Online (Sandbox Code Playgroud)