SML:如果 - >是右关联的

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)

但这是不正确的,因为域类型是由函数和列表组成的元组,范围类型只是一个列表.

我哪里错了?

谢谢!

Tik*_*vis 6

在SML中,类型运算符的*绑定比->以下更紧密:它具有更高的优先级,就像*具有更高的优先级而不是+算术一样.

这就是为什么string * string -> string相同(string * string) -> string而不是string * (string -> string).为了阅读你的例子,我们需要在括号*前加上括号->:

(('a -> 'b) * 'a list) -> 'b list
Run Code Online (Sandbox Code Playgroud)