键入关于无限类型的错误

时间:2011-03-15 23:25:17

标签: types ml

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

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 个答案:

答案 0 :(得分:2)

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

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

返回'a。

应该是:

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