【问题标题】:Quicksort in SML operator and operand don't agree errorSML 运算符和操作数中的快速排序不同意错误
【发布时间】:2016-10-17 00:48:29
【问题描述】:

我正在尝试编写类型的快速排序函数

'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 <)

我意识到我一定是错误地传递了它,但我就是看不到我的错误。所以,我的问题是这里发生了什么,在尝试传递我的列表和运算符时出现此错误?

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    你可以简单地改变:

    fun quicksort xs f = let 
    

    到:

    fun quicksort (xs,f) = let
    

    因为您希望快速排序将元组 (xs,f) 作为参数。

    【讨论】:

    • 抛出此错误:错误:运算符和操作数不同意[循环]
    • 很高兴有帮助!
    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2019-09-11
    • 2018-04-28
    • 2017-12-12
    相关资源
    最近更新 更多