我正在尝试使用选择排序对一个简单的函数进行排序,我的代码如下:
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
答案 0 :(得分:2)
函数slctsrt2应该返回一个列表。但是,第一个条款:
fun slctsrt2 ([], min, []) = min
返回'a。
应该是:
fun slctsrt2 ([], min, []) = min :: []