Domanda

A volte vedo codice come

let (alt : recognizer -> recognizer -> recognizer) =
  fun a b p -> union  (a p) (b p)

O come:

let hd = function
    Cons(x,xf) -> x
  | Nil -> raise Empty

Qual è la differenza tra fun e function ?

È stato utile?

Soluzione

La semantica per questo è la stessa di F # (probabilmente perché F # è basato su OCaml):

  • function consente l'uso di pattern matching (cioè | ), ma di conseguenza può essere passato solo un argomento.

    function p_1 -> exp_1 | … | p_n -> exp_n
    

    è equivalente a

    fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
    
  • fun non consente la corrispondenza dei pattern, ma può essere passato più argomenti, ad esempio

    fun x y -> x + y
    

Quando è possibile utilizzare una delle due forme, divertimento è generalmente preferito per la sua compattezza.

Vedi anche Documentazione OCaml sulle funzioni .

Altri suggerimenti

Il modo in cui ci penso

function patterns

è una scorciatoia per

(fun x -> match x with patterns)

dove 'pattern' è ad esempio

| Some(x) -> yadda | None -> blah

(E

fun args -> expr

è il modo in cui definisci una lambda.)

Russ Cam ha ragione nella sua risposta.

Ecco un post sull'elenco OCaml che ne parla

http: // caml. inria.fr/pub/ml-archives/ocaml-beginners/2003/11/b8036b7a0c1d082111d7a83c8f6dbfbb.en.html

function consente solo un argomento ma consente la corrispondenza dei pattern, mentre fun è il modo più generale e flessibile per definire una funzione.

In genere uso il divertimento a meno che non ci sia una buona ragione per usare la funzione.

Puoi vederlo nel codice che hai pubblicato in cui la dichiarazione fun accetta 3 argomenti e la dichiarazione function fa corrispondere lo schema al suo input

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top