我正在尝试一个简单的函数来使用选择排序来排序列表,我的代码如下:
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
发布于 2011-03-15 23:42:44
函数slctsrt2应该返回一个列表。但是,第一个子句:
fun slctsrt2 ([], min, []) = min
返回a 'a。
它应该是:
fun slctsrt2 ([], min, []) = min :: []
https://stackoverflow.com/questions/5319250
复制