Haskell函数反转列表并在其中插入新元素

时间:2016-11-13 22:59:54

标签: haskell

我一直在研究一个Haskell函数,它假定要获取一个列表和一个值。它应该反转列表,然后将值附加到前面。

我尝试过单独的反向和插入功能并在另一个上调用一个,但我找不到让它工作的方法。以下是我到目前为止的情况:

反向功能:

reverse' :: [a] -> [a]  
reverse' [] = []  
reverse' (x:xs) = reverse' xs ++ [x]  

插入功能:

insert :: Ord a => a -> [a] -> [a]   
insert x [] = [x]
insert x (y:ys)
  | x > y     = y : insert x ys
  | otherwise = x : y : ys 

我应该在另一个上调用其中一个功能吗?如果是这样,我该怎么做呢?或者,如果我应该只做一个功能?我已经对这个做了很多修改,似乎无法使用任何一种方法。

感谢您提供任何帮助,因为我还是初学者并且正在学习这门语言!

1 个答案:

答案 0 :(得分:1)

您的reverse'函数按预期工作,因此我们可以使用它来反转传递给我们函数的列表(请注意,它的使用与reverse的使用相同,但效率低于Prelude insert)。您编写的reverse'函数在这里不太有用,因为我们希望将值插入到列表前面的前面,而不是在小于它的第一个值之后。

因此,我们将您的reverseAndInsert :: a -> [a] -> [a] reverseAndInsert x xs = x : reverse' xs 函数应用于列表,并将输入值放在返回的前面。

vs