Семантика выражения F # - PullRequest
1 голос
/ 13 мая 2009

Может кто-нибудь описать мне это выражение F #

val augment: GameGrid -> points -> unit

Что означает ключевое слово val?

Правда ли, что обычно type -> type обозначает функцию, которая возвращает указанный тип? Так означает ли type -> type -> type функцию, которая возвращает функцию, которая возвращает указанный тип?

Ответы [ 2 ]

4 голосов
/ 13 мая 2009

(Бит 'val' не является выражением; я думаю, что это может произойти в трех разных контекстах:

  • вывод FSI (F # интерактивный REPL), описывающий предполагаемый тип привязки
  • в файле сигнатуры (.fsi), описывающем тип значения модуля с привязкой по буквам
  • в определении структуры / класса («явный» синтаксис) для определения переменной экземпляра

и ни один из них не является технически контекстом выражения.)

Что касается типа, действительно

A1 -> A2 -> R

означает функцию, которая принимает A1 и возвращает функцию, которая принимает A2 и возвращает R. Аргументы каррируются, и вам может пригодиться чтение, например,

Типы функций F #: веселье с кортежами и карри

, который описывает карри и частичное применение более подробно.

3 голосов
/ 13 мая 2009

Как вы получили этот вывод? В ФСИ?

Val просто указывает на определение значения.

например. если вы написали следующее в C #

private void Foo(int i);

вы бы написали это на F #

val Foo : int -> unit

Относительно type -> type -> type: это функция с двумя параметрами (типом), возвращающая `type´

* 1014 Е.Г. *

let plus a b = a + b

имеет подпись int -> int -> int.

Ваша идея с функцией, которая возвращает функцию, на самом деле верна. Это очень интересная техника во многих функциональных языках, называемая curry

...