比较时间戳的SML程序

比较时间戳的SML程序,sml,Sml,我正在做一个练习,其中有两个时间戳,我必须找出哪个是大的。这个程序是用SML编写的。所以我提出了这个计划 val record1 = {hour = 11, min = 45, f = "PM"}; val record2 = {hour = 2,min = 13,f = "AM"}; fun timerrecord(record1,record2)= if (#f record1 = "PM") andalso (#f record2="AM") then "t1 c

我正在做一个练习,其中有两个时间戳,我必须找出哪个是大的。这个程序是用SML编写的。所以我提出了这个计划

val record1 = {hour = 11, min = 45, f = "PM"};    
val record2 = {hour = 2,min = 13,f = "AM"};    
fun timerrecord(record1,record2)=     
if (#f record1 = "PM") andalso (#f record2="AM") then "t1 comes First"    
else if(#f record1 = "AM") andalso (#f record1="PM") then "t2 comes First"     
else if (#hour record1 > #hour record1) then "t1 comes First"    
else if (#hour record1 < #hour record1) then "t2 comes First"    
else if (#min record1 > #min record1) then "t1 comes First"    
else "t2 comes First";
val record1={hour=11,min=45,f=“PM”};
val record2={hour=2,min=13,f=“AM”};
乐趣时光记录(记录1,记录2)=
如果(#f record1=“PM”)和(#f record2=“AM”),那么“t1优先”
否则,如果(#f record1=“AM”)和(#f record1=“PM”),则“t2优先”
否则如果(#小时记录1>#小时记录1)则“t1优先”
否则如果(#小时记录1<#小时记录1)则“t2优先”
否则如果(#min record1>#min record1)则“t1优先”
否则“t2优先”;
问题是,当我在没有函数的情况下编写它时,它会给出正确的结果,但当我将代码放入该函数时(如上所述),它会给出一个错误…未解决的FLEX记录

t1、t2和record1、record2是时间戳


我是SML的新手,所以任何帮助都会有帮助。提前感谢。

您必须定义记录类型才能编译此函数。因此,请加上:

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})= 
或者,您可以通过将函数签名更改为:

fun timerrecord(record1:recc,record2:recc)=
fun timerrecord(record1:{hour:int, min:int, f:string},record2:{hour:int, min:int, f:string})= 
取决于你有多干燥:-)


PS:找到DRY的含义。

您必须定义记录类型才能编译此函数。因此,请加上:

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})= 
或者,您可以通过将函数签名更改为:

fun timerrecord(record1:recc,record2:recc)=
fun timerrecord(record1:{hour:int, min:int, f:string},record2:{hour:int, min:int, f:string})= 
取决于你有多干燥:-)


PS:找到DRY的含义。

正如用户987339所说,您可以输入类型注释来解析类型。但在ML中实现这一点的常用方法不是首先使用记录选择器
#label
,而是依赖于模式匹配,这意味着类型:

fun timerRecord({hour = h1, min = m1, f = f1}, {hour = h2, min = m2, f = f2}) =     
    if f1 = "PM" andalso f2 = "AM" then "t1 comes first"    
    else if f1 = "AM" andalso f2 = "PM" then "t2 comes first"     
    else if h1 > h2 then "t2 comes first"    
    else if h1 < h2 then "t1 comes first"    
    else if m1 > m2 then "t2 comes first"    
    else "t1 comes first"
fun timer记录({hour=h1,min=m1,f=f1},{hour=h2,min=m2,f=f2})=
如果f1=“PM”和f2=“AM”,则“t1优先”
否则,如果f1=“AM”和f2=“PM”,则“t2优先”
否则,如果h1>h2,则“t2优先”
否则,如果h1m2,则“t2优先”
否则“t1优先”

(修复了一些情况。)

正如用户987339所说,您可以输入类型注释来解析类型。但在ML中实现这一点的常用方法不是首先使用记录选择器
#label
,而是依赖于模式匹配,这意味着类型:

fun timerRecord({hour = h1, min = m1, f = f1}, {hour = h2, min = m2, f = f2}) =     
    if f1 = "PM" andalso f2 = "AM" then "t1 comes first"    
    else if f1 = "AM" andalso f2 = "PM" then "t2 comes first"     
    else if h1 > h2 then "t2 comes first"    
    else if h1 < h2 then "t1 comes first"    
    else if m1 > m2 then "t2 comes first"    
    else "t1 comes first"
fun timer记录({hour=h1,min=m1,f=f1},{hour=h2,min=m2,f=f2})=
如果f1=“PM”和f2=“AM”,则“t1优先”
否则,如果f1=“AM”和f2=“PM”,则“t2优先”
否则,如果h1>h2,则“t2优先”
否则,如果h1m2,则“t2优先”
否则“t1优先”
(修复了几个案例。)