0

2 つのタイムスタンプが与えられ、どちらが大きいかを見つける必要がある演習を行っています。このプログラムは SML で書かれているので、このプログラムを思いつきました....

type triple = {int,int,string};
val record1 = (11,45,"PM");
val record2 = (2,13,"AM");
fun timerrecord(record1:triple,record2:triple)= 
let val (hour1:int,min1:int,f1:string) = record1;
    val (hour2:int,min2:int,f2:string) = record2
in
if (f1= "AM") andalso (f2="PM") then "t1 comes First"
else if(f1 = "PM") andalso (f2="AM") then "t2 comes First"
else if (hour1 < hour2) then "t1 comes First"
else if (hour1 > hour2) then "t2 comes First"
else if (min1 < min2) then "t1 comes First"
else "t2 comes First";

上記のプログラムは全体として実行されていませんが、個々のロジックはタプルが原因です.2つのタイムスタンプを比較するためにタプルを最大限に活用することができません. また、タプルが既知であるかのようにアクセスする方法を知りたいので、この問題を簡単に解決できます。前もって感謝します。

4

2 に答える 2

1

私はあなたが意味したと思います

type triple = (int*int*string)

また、を避ける;必要があります。これらは REPL でのみ必要です。そして、関数の本体の式endの最後に追加するのを忘れました。let..in..endまたは、;コンパイルされません (少なくとも私のバージョンの SML では)。

あなたの質問は完全に明確ではありません。これを行うには多くの方法があると確信しています。または、次のように試すこともできます。

fun timerrecord(record1:triple,record2:triple)= 
    case (record1, record2) of
        ((_,_,"AM"),(_,_,"PM")) => record1
      | ((_,_,"PM"),(_,_,"AM")) => record2
      | ((h1,m1,_),(h2,m2,_)) => if h1 < h2 then record1
                                 else if h2 < h1 then record2
                                 else if m1 < m2 then record1
                                 else record2
于 2013-11-14T20:41:03.150 に答える
1

これを行う方法はいくつかあります。この関数をコンパイルするために、レコード タイプを定義できます。

type recc = {hour:int, min:int, f:string};    

関数の署名を次のように変更します。

fun timerrecord(record1:recc,record2:recc)=

または、関数の署名を次のように変更することもできます。

fun timerrecord(record1:{hour:int, min:int, f:string},record2:{hour:int, min:int, f:string})= 

ML はパターン マッチングによってこれを行っています。

fun timerRecord({hour = h1, min = m1, f = f1}, {hour = h2, min = m2, f = f2}) =     

そして、あなたの機能は次のようになります:

fun timerRecord({hour = h1, min = m1, f = f1}, {hour = h2, min = m2, f = f2}) =     
    if (f1= "AM") andalso (f2="PM") then "t1 comes First"
    else if(f1 = "PM") andalso (f2="AM") then "t2 comes First"
    else if (h1 < h2) then "t1 comes First"
    else if (h1 > h2) then "t2 comes First"
    else if (m1 < m2) then "t1 comes First"
    else "t2 comes First";
于 2013-11-14T20:50:19.650 に答える