如何定义一个段函数
How to make define a segments function
如何定义一个函数段,它以有限列表 xs 作为参数,returns xs 的所有段的列表。 (xs 的一段是xs 的相邻元素的选择。)
例如,段 [1, 2, 3] = [[1, 2, 3], [1, 2], [2, 3], [1], [2], [3]] .
我知道如何写一个init,但是我该如何扩展到这种情况!
segments :: [a] -> [[a]]
segments [] = []
segments (x:xs) = [x:xs] ++ segments (init (x:xs))
如果你可以编写自己的 inits_
函数(我特地在末尾添加 _
因为 inits
是标准函数,但行为有点不同),你可以编写函数 segments
通过为所有尾巴调用 inits_
(我只是重写了 segments
的代码并将其重命名为 inits_
):
inits_ :: [a] -> [[a]]
inits_ [] = []
inits_ xs = xs : inits_ (init xs)
segments :: [a] -> [[a]]
segments [] = []
segments (x:xs) = inits_ (x:xs) ++ segments xs
如何定义一个函数段,它以有限列表 xs 作为参数,returns xs 的所有段的列表。 (xs 的一段是xs 的相邻元素的选择。)
例如,段 [1, 2, 3] = [[1, 2, 3], [1, 2], [2, 3], [1], [2], [3]] .
我知道如何写一个init,但是我该如何扩展到这种情况!
segments :: [a] -> [[a]]
segments [] = []
segments (x:xs) = [x:xs] ++ segments (init (x:xs))
如果你可以编写自己的 inits_
函数(我特地在末尾添加 _
因为 inits
是标准函数,但行为有点不同),你可以编写函数 segments
通过为所有尾巴调用 inits_
(我只是重写了 segments
的代码并将其重命名为 inits_
):
inits_ :: [a] -> [[a]]
inits_ [] = []
inits_ xs = xs : inits_ (init xs)
segments :: [a] -> [[a]]
segments [] = []
segments (x:xs) = inits_ (x:xs) ++ segments xs