标准ML:是否可以命名函数参数的数据类型?

| 我是ML的新手,并且拥有一个可以接收特殊的预定义数据类型,并且能够引用其整个参数数据类型而不是其组件的函数。 这是一个愚蠢的例子:
datatype frame = Frame of string list * string list 

(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame = 
  fn (string(var), Frame(variables, values)) =>     
    ... 
    Frame(variables, values) 
    ... ;
1)我想返回给定的帧。我还要再建一个
Frame
吗? 2)我想将给定的帧传递给另一个函数,是否必须再次提供一个新的
Frame(variables, values)
? 我希望我可以这样写:
val lookup_variable_value_in_frame = 
     fn (string(var), frame : Frame(variables, values)) =>  ... 
这样我就可以使用框架或其组件了。 谢谢。     
已邀请:
        您的数据类型已经有一个名称,即
frame
。您不必构建另一个4来返回或传递给另一个函数。第一种选择是使用显式类型注释:
(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame = 
  fn (var: string, f: frame) =>     
    ... 
    f 
    ... ;
此选项并不常见,仅当您需要的泛型类型少于类型检查器推断的类型时,才应使用此选项。另一种选择是使用
as
关键字对值进行另一个绑定:
val lookup_variable_value_in_frame = 
     fn (var, f as Frame(variables, values)) =>  
         ...(* using f, variables or values here *)
请注意,在SML中没有像“ 9”这样的东西,对于显式类型注释,请使用“ 10”或“ 11”。     

要回复问题请先登录注册