Ошибка типа о бесконечном типе - PullRequest
1 голос
/ 16 марта 2011

Я пытаюсь исправить простую функцию для сортировки списка, используя сортировку выбора, код Im ниже:

fun slctsrt [] = []
 |  slctsrt (x::xs) = slctsrt2 (xs, x, []);
fun slctsrt2 ([], min, []) = min
 |  slctsrt2 ([], min, y::ys) = min :: slctsrt2 (ys, y, [])
 |  slctsrt2 (x::xs, min, ys) = if x<min then slctsrt2 (xs, x, min::ys)
                          else slctsrt2 (xs,min,x::ys);

... и возвращает ошибку ниже:

"lctsrt.txt", line 7, characters 32-35:
!  |  slctsrt2 ([], min, y::ys) = min :: slctsrt2 (ys, y, [])
!                                 ^^^
! Type clash: expression of type
!   'a list
! cannot have type
!   'a
! because of circularity

1 Ответ

2 голосов
/ 16 марта 2011

Функция slctsrt2 должна возвращать список.Тем не менее, первое предложение:

fun slctsrt2 ([], min, []) = min

возвращает a.

Это должно быть:

 fun slctsrt2 ([], min, []) = min :: []
...