我怎样才能使这个山Haskell代码工作



我如何将2个列表放在1个列表中,因为这段代码只会返回第一个列表。

mountain :: Int -> [Int]
mountain 0 = [0]
mountain 1 = [0]
mountain 2 = [0,2,0]
mountain 3 = [0,2,0]
mountain x 
| x `mod` 2 == 0 = [0,2..x] ++ [x-2..0]
| otherwise = [0,2..x-1] ++ [x-3..0]

Examples:
--mountain 0 == [0]
--mountain 6 == [0,2,4,6,4,2,0]
--mountain 7 == [0,2,4,6,4,2,0]
--mountain 10 == [0,2,4,6,8,10,8,6,4,2,0]

[x-2 .. 0]将为空,因为没有";项目,它将成为一个步骤。你可以用[x-2, x-4 .. 0]做这样的列表。您可以使用实现mountain功能

mountain :: Int -> [Int]
mountain i = [0, 2 .. n] ++ [n-2,n-4.. 0]
where n = 2 * div i 2

最新更新