0
我正在嘗試學習Haskell,並且嘗試完成示例問題時遇到了問題。問題是根據給定的謂詞排序在Haskell列表即類型是根據謂詞對haskell中的列表進行排序
sort :: (a -> a -> Bool) -> [a] -> [a]
我到目前爲止的代碼:
sort _ [] = []
sort f (x:xs) =
let
smaller = sort f (filter (f x) xs)
bigger = sort f (filter (f x) xs) --error is on this line
in smaller ++ [x] ++ bigger
不是在這個意義上IM正常工作,而不是代碼確定如何採取相反的功能。例如,如果它是一個普通的排序函數,我會使用smaller = quicksort (filter (<=x) xs)
和bigger = quicksort (filter (>x) xs)
這將根據謂詞分解列表,但是如何使用更高階的謂詞來做到這一點?
首先,你需要縮進'smaller'和'更大一些,以便他們通過'let'。其次,你可能想看看'not'函數。 – bheklilr
@bheklilr似乎這樣編譯得很好。 「not」函數應該像「(not f x)」一樣使用嗎?因爲這給我編譯器錯誤。 – Ben
嘗試'(不是(f x))或'(不是$ f x)','f'不是'not'的參數,'f x'是你想給它的參數。 – bheklilr