'a -> 'b 以 ml 为单位的函数
'a -> 'b function in ml
是否可以在 sml/nj 中编写一个具有签名的函数:
fn : 'a -> 'b
我最初的目的是制作一个带有签名的函数:
fn: ( 'a -> 'b ) -> ( 'b -> 'a ) -> 'a -> 'b -> 'c
经过多次尝试我得到:
fn: ( 'a -> 'b ) -> ( 'b -> 'a ) -> 'a -> 'b -> 'c -> 'c
但我从来没有按照要求成功制作,我意识到如果我有可能制作一个从 'a 到 'b 的函数,我就能找到解决方案。
只有两种可能的实现可以提供 'a -> 'b
功能,而且它们很少有用:
抛出异常
- fun foo a = raise Fail "error";
val foo = fn : 'a -> 'b
无限循环
- fun bar a = bar a;
val bar = fn : 'a -> 'b
我预感翻译中丢失了一些细节,因为您提供的第二种类型签名没有多大意义。
is it possible to write in sml/nj a function with the signature:
fn : 'a -> 'b
是——参见 this Whosebug question(并养成在您询问时检查重复项的习惯。;-)
my initial purpose was to make a function with the signature:
foo : ('a -> 'b) -> ('b -> 'a) -> 'a -> 'b -> 'c
可能是这样的:
exception Done
fun foo f g x y _ = (f x; g y; raise Done)
或者像这样:
fun foo f g x y _ =
let fun inf () = inf ()
in f x; g y; inf () end
使这些函数与类型为 'a -> 'b
的函数相似的原因实际上是 'c
部分,因为该类型与输入类型无关,就像 'b
不相关一样与 'a
有关。 foo
中的 'a
s 和 'b
s 实际上服务于一个目的并允许某些功能应用程序(f x
、g y
),即使这些值不能是结果的一部分,因为您没有类型安全的方法将 'a
或 'b
类型的值转换为 'c
.
类型的值
是否可以在 sml/nj 中编写一个具有签名的函数:
fn : 'a -> 'b
我最初的目的是制作一个带有签名的函数:
fn: ( 'a -> 'b ) -> ( 'b -> 'a ) -> 'a -> 'b -> 'c
经过多次尝试我得到:
fn: ( 'a -> 'b ) -> ( 'b -> 'a ) -> 'a -> 'b -> 'c -> 'c
但我从来没有按照要求成功制作,我意识到如果我有可能制作一个从 'a 到 'b 的函数,我就能找到解决方案。
只有两种可能的实现可以提供 'a -> 'b
功能,而且它们很少有用:
抛出异常
- fun foo a = raise Fail "error";
val foo = fn : 'a -> 'b
无限循环
- fun bar a = bar a;
val bar = fn : 'a -> 'b
我预感翻译中丢失了一些细节,因为您提供的第二种类型签名没有多大意义。
is it possible to write in sml/nj a function with the signature:
fn : 'a -> 'b
是——参见 this Whosebug question(并养成在您询问时检查重复项的习惯。;-)
my initial purpose was to make a function with the signature:
foo : ('a -> 'b) -> ('b -> 'a) -> 'a -> 'b -> 'c
可能是这样的:
exception Done
fun foo f g x y _ = (f x; g y; raise Done)
或者像这样:
fun foo f g x y _ =
let fun inf () = inf ()
in f x; g y; inf () end
使这些函数与类型为 'a -> 'b
的函数相似的原因实际上是 'c
部分,因为该类型与输入类型无关,就像 'b
不相关一样与 'a
有关。 foo
中的 'a
s 和 'b
s 实际上服务于一个目的并允许某些功能应用程序(f x
、g y
),即使这些值不能是结果的一部分,因为您没有类型安全的方法将 'a
或 'b
类型的值转换为 'c
.