【问题标题】:Semantics of F# statementF# 语句的语义
【发布时间】:2010-10-25 22:31:45
【问题描述】:
谁能向我描述一下这个 F# 表达式?
val augment: GameGrid -> points -> unit
val 关键字是什么意思?
是不是通常type -> type表示函数返回指定类型?那么type -> type -> type是不是表示一个函数返回一个返回指定类型的函数呢?
【问题讨论】:
标签:
syntax
f#
function
semantics
currying
【解决方案1】:
你是如何得到这个输出的?在 FSI 中?
Val 只是表示一个值的定义。
例如如果你用 C# 编写了以下内容
private void Foo(int i);
你可以用 F# 写这个
val Foo : int -> unit
关于type -> type -> type:这是一个有两个参数(类型)返回`type´的函数
例如
let plus a b = a + b
已获得签名int -> int -> int。
您对返回函数的函数的想法实际上是正确的。这是许多函数式语言中非常有趣的技术,称为currying
【解决方案2】:
(“val”位不是表达式;我认为它可以出现在三种不同的上下文中:
- FSI(F# 交互式 REPL)的输出,描述推断的绑定类型
- 在签名 (.fsi) 文件中,描述 let-bound 模块值的类型
- 在结构/类定义(“显式”语法)中,定义实例变量
这些都不是技术上的表达上下文。)
至于类型,确实
A1 -> A2 -> R
表示一个接受 A1 并返回一个接受 A2 并返回 R 的函数的函数。参数是柯里化的,你可以好好阅读例如
F# function types: fun with tuples and currying
更详细地描述了柯里化和部分应用。