2016-10-16 3 views
1

Я пытаюсь написать функцию QuickSort типаQuicksort в SML оператор и операнд не согласен ошибка

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

Я понимаю, что я должен передавать его неправильно, но я просто не вижу своей ошибки. Итак, мой вопрос заключается в том, что происходит здесь, когда я получаю эту ошибку при попытке передать мой список и оператор?

ответ

2

Вы могли бы просто изменить:

fun quicksort xs f = let 

к:

fun quicksort (xs,f) = let 

, так как вы хотите быстрой сортировки, чтобы в качестве параметров кортеж (хз, е).

+0

Это вызывает эту ошибку: Ошибка: оператор и операнд не согласны [roundity] – Griffin

+0

Я проверю и отредактировал сообщение позже – coder

+0

Хорошо, спасибо! :) – Griffin

 Смежные вопросы

  • Нет связанных вопросов^_^