1

選択ソートを使用してリストをソートするための単純な関数を修正しようとしています。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
4

1 に答える 1

2

関数slctsrt2はリストを返す必要があります。ただし、最初の句:

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

'aを返します。

そのはず:

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