bcl*_*man 1 functional-programming sml
Ullman的书"ML编程元素"介绍了一个简单版本的map函数,定义如下:
fun simpleMap(F, nil) = nil
| simpleMap(F, x::xs) = F(x)::simpleMap(F, xs);
val map = fn : ('a -> 'b) * 'a list -> 'b list
Run Code Online (Sandbox Code Playgroud)
鉴于 - >是正确的关联,你不会像这样括号:
('a -> 'b) * ('a list -> 'b list) ?
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,因为域类型是由函数和列表组成的元组,范围类型只是一个列表.
我哪里错了?
谢谢!
在SML中,类型运算符的*绑定比->以下更紧密:它具有更高的优先级,就像*具有更高的优先级而不是+算术一样.
这就是为什么string * string -> string相同(string * string) -> string而不是string * (string -> string).为了阅读你的例子,我们需要在括号*前加上括号->:
(('a -> 'b) * 'a list) -> 'b list
Run Code Online (Sandbox Code Playgroud)