2017-07-13 1 views
0
Datatype events = enter of string * real | exit of string *real; 

だから私は、このデータ型を持っていると私は、入力としてイベントのリストを受け取り、イベントの実数部でソートし、そのリストを返す関数を記述する必要があります。 私はいくつかの機能を書こうとしましたが、何かいいアイデアは思い付きませんでしたか?標準SMLのデータ型のリスト

これは私が試したコードです:私が得た

val rec ordina = fn 
    [] => [] 
    |v1::v2::l => if (#2(v2)) > (#2(v1)) 
        then ordina (v1::l) 
        else oridna (v2::1); 

エラー:

ポリ:エラー:固定レコードタイプを見つけることができません。 #2の近くに見つかりました

ポリ:エラー:固定レコードタイプが見つかりません。 #2

+0

どのような機能を書き込もうとしましたか?どのようなエラーが発生しましたか?宿題の手助けが必要な場合は、あなたの努力を示す必要があります。 –

+0

私は使用しようとしたコードを掲載しました。 –

+0

'#2'マクロはタプルで動作しますが、' Enter(s、r) 'と' Exit(s、r) 'は直接タプルではありません。あなたは以下の私の答えに示唆するようなゲッター関数を作成する必要があります。私が示唆するように完全にパターンマッチングを使うか、 'fun get _...(ペアを入力する)=#2ペア| ... 'は両方のオプションです。 –

答えて

1

いくつかのフィードバック、

  • 近くで発見データ型の宣言は、おそらく

    datatype event = Enter of string * real 
           | Exit of string * real 
    

    単一の値は、単一のイベントが含まれていなければなりません。

    複数の値は、例えば、 イベントリストを入力してください。

    値コンストラクタは通常、大文字の開始文字で記述されます。

  • SML/NJには、ListMergeSort.sortという汎用ソート機能があります。 'a *' a - > bool型の関数があります。この場合、'a =イベントです。あなたは、その後、event_aが彼らの本当の部に基づいてevent_b前に注文する必要があるかどうかを返します

    fun cmp_event (event_a, event_b) = ... 
    

    を関数を書くことができます。 ヒント:最初に部分を抽出するヘルパー関数を作成します。 (実数部の目的を反映した、より良い名前を思い付く。)

    fun get_real_part (Enter (_, r)) = ... 
        | get_real_part ... = ... 
    
  • あなたがListMergeSort.sortを使用することを許可されていない場合は、make your own sort

関連する問題