2012-03-05 11 views
1

私は入力として3つの要素を取り、最小から最大までソートされたリストを返す標準ml関数を作ろうとしています。私は最小、最大、および中間の要素を得る3つのヘルパーメソッドを使用しました。コードは以下の通りです:標準ml sorting 3要素

- fun min3 (a, b, c):real = 
    if a < b andalso a < c then a 
     else if b < a andalso b < c then b 
     else c; 

- fun mid3 (a, b, c):real = 
    if (a < b andalso a > c) orelse (a > b andalso a < c) then a 
     else if (b < a andalso b > c) orelse (b > a andalso b < c) then b 
     else c; 

- fun max3 (a, b, c):real = 
    if a > b andalso a > c then a 
    else if b > a andalso b > c then b 
     else c; 

- fun sort3 (a, b, c):real = 
    min3(a, b, c)::mid3(a, b, c)::max3(a, b, c)::[]; 

int型を扱うときに次のことが完璧に働いたが、私は実数にそれらを変更したときに、ヘルパーメソッドは、正しい結果を返しますが、次のされたソート方法を入力するとき、私は(エラーが出ますエラーテキストをコピーcouldntの私は)のスクリーンショットを取った:

enter image description here

コードに間違っている可能性が何? ありがとう

また、ここに投稿した方法以外の3つの要素を並べ替える別の方法がありますか?

答えて

0

タイプを変更すると、戻り値がsort3で間違っています。エラーメッセージはsort3を実際に返すと宣言したことを伝えていますが、実際には実数のリストを返します。

+0

私は、各要素をヘルパーメソッドによってリスト自体を返し、それらを@演算子で連結した場合、それをリストとして返しますか? –

+0

@ aizen92それはすでにリストを返すことを知っています。問題は、あなたが 'fun sort3(a、b、c):real'を書いたときに実際に返さなければならないと明示的に言ったということです。 – sepp2k

+0

しかし、私はそれを実際に返すようにしたい、私はこのメソッドを実際にしか動作させたくありません –