我正在尝试创建一个插入排序方法,允许我根据项目的功能进行插入排序,例如,应用于1的函数可能大于应用于2的函数,反之亦然,具体取决于函数。
到目前为止,如果我可以将一个元素插入到列表的一部分中,我就可以解决这个问题。
insertBy :: Ord b => (a -> b) -> a -> [a] -> [a]
insertBy f a [] = [a]
insertBy f a (x:xs) = if ( (f a)< (f x )) then a:x:xs else insertBy f a xs
但是,我在第二行遇到了解析错误。对不起,如果它真的很明显,但我看不到它。
一旦我有了这个部分,我将调用一个插入排序函数,使用它来对列表进行排序,但首先我需要帮助:(
编辑:确切错误“模式插入中的解析错误”
答案 0 :(得分:1)
我认为你希望最后的表达是
x : insertBy f a xs
否则,在这种情况下,您将丢弃列表的第一个元素。