1

我试图编写一个用于对整数列表进行排序的代码,但是我从终端收到一条错误消息,代码和错误如下所示:

-- sort
type Element = Int
merge_sort :: [Element] -> [Element]
merge_sort list = case list of
  [] -> []
  [x] -> [x]
  _  -> merge (merge_sort(list_left)) (merge_sort(list_right))
     where (list_left, list_right) = split list

我收到以下错误:

[1 of 1] Compiling Main             ( recursion test.hs, interpreted )

recursion test.hs:7:9: Not in scope: `merge'

recursion test.hs:8:42: Not in scope: `split'
Failed, modules loaded: none.
Prelude> 

谁喜欢告诉我我的代码有什么问题?谢谢

4

1 回答 1

7

我只是将一些评论放在答案中,以便可以将这个问题标记为已回答。

merge在 Prelude 中没有定义,但你可以用

import Data.List.Utils (merge)

split没有定义,但不要害怕:

split ls = splitAt (length ls `div` 2) ls

这需要你

import Data.List

Haskell 在其标准库中有很多这样的函数。它们不是“内置的”*,但可以使用。如果你想找到一个,我会使用hoogle

** 现在大多数语言都是这样的,Haskell 在这里并不是独一无二的。

于 2013-04-03T21:35:17.780 回答