SML运算符和操作数中的Quicksort不同意错误

时间:2016-10-16 15:17:27

标签: sml smlnj

我正在尝试编写类型

的快速排序功能
'a list * ('a * 'a -> bool) -> 'a list

但出于某些原因我得到了:

'a list -> ('a * 'a -> bool) -> 'a list

这是我的函数代码:

fun quicksort xs f = let
   fun qs [] = []
     | qs [x] = [x]
    | qs (p::xs) = let
        val (less, more) = List.partition (fn x => f (x, p)) xs
        in
          qs less @ p :: qs more
        end
   in
     qs xs
   end

当我调用该函数时,我收到此错误:

stdIn:73.1-73.18 Error: operator and operand don't agree [tycon mismatch]
  operator domain: 'Z list
  operand:         int list * (int * int -> bool)
  in expression:
    quicksort (L, op <)

我意识到我必须错误地传递它,但我无法看到我的错误。那么,我的问题是这里发生了什么,我在尝试传递我的列表和运算符时遇到此错误?

1 个答案:

答案 0 :(得分:2)

你可以简单地改变:

fun quicksort xs f = let 

为:

fun quicksort (xs,f) = let

因为你想快速排序将参数作为元组(xs,f)。