【问题标题】: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

    【讨论】:

    • 是的,它来自 FSI 文件。
    【解决方案2】:

    (“val”位不是表达式;我认为它可以出现在三种不同的上下文中:

    • FSI(F# 交互式 REPL)的输出,描述推断的绑定类型
    • 在签名 (.fsi) 文件中,描述 let-bound 模块值的类型
    • 在结构/类定义(“显式”语法)中,定义实例变量

    这些都不是技术上的表达上下文。)

    至于类型,确实

    A1 -> A2 -> R
    

    表示一个接受 A1 并返回一个接受 A2 并返回 R 的函数的函数。参数是柯里化的,你可以好好阅读例如​​

    F# function types: fun with tuples and currying

    更详细地描述了柯里化和部分应用。

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多