2009-05-13 9 views
1

Quelqu'un peut-il me décrire cette expression F #?Sémantique de l'instruction F #

val augment: GameGrid -> points -> unit 

Que signifie le mot-clé val?

Est-il vrai que généralement type -> type indique une fonction qui renvoie le type spécifié? Donc, type -> type -> type indique une fonction qui renvoie une fonction qui renvoie le type spécifié?

Répondre

4

(Le bit « val » est pas une expression, désinvolture je pense qu'il peut apparaître dans trois contextes différents:

  • la sortie du FSI (F # REPL interactif), décrivant le type inférées d'une fixation
  • dans une signature (.fsi) fichier, décrivant le type d'une valeur de module lié let-
  • dans une définition struct/classe (syntaxe 'explicite'), pour définir une variable d'instance

et aucun o f ceux qui sont techniquement des contextes d'expression.)

En ce qui concerne le type, en effet

A1 -> A2 -> R 

désigne une fonction qui prend une A1, et retourne une fonction qui prend une A2 et renvoie un R. Les arguments sont cari , et il peut vous faire bien de lire par exemple

F# function types: fun with tuples and currying

qui décrit le corroyage et de l'application partielle plus en détail.

+0

Ceci provient d'un fichier FSI. –

3

Comment avez-vous obtenu cette sortie? En FSI?

Val indique juste une définition d'une valeur.

E.g. si vous avez écrit ce qui suit dans C#

private void Foo(int i); 

vous écrire ceci dans F #

val Foo : int -> unit 

En ce qui concerne type -> type -> type: Ceci est une fonction avec deux paramètres (type) de retour `type'

Par ex

let plus a b = a + b 

a la signature int -> int -> int.

Votre idée avec une fonction qui renvoie une fonction est réellement correcte. C'est une technique très intéressante dans de nombreux langages fonctionnels appelée currying

+0

Oui, il provient d'un fichier FSI. –