1

我正在尝试纠正一个简单的函数来使用选择排序对列表进行排序,我的代码如下:

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
4

1 回答 1

2

函数 slctsrt2 应该返回一个列表。但是,第一条:

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

返回一个'a。

它应该是:

 fun slctsrt2 ([], min, []) = min :: []
于 2011-03-15T23:42:44.053 回答