Domanda

Programmazione tacita o senza punti consente di creare funzioni senza tener conto dei loro argomenti . Questo può essere fatto in F #?

È stato utile?

Soluzione

Giusto per andare con la risposta di Chuck & amp; Commento di Chris Smiths, potresti scrivere

let digits = string_of_int >> String.length
digits 9000;; // 4
[1; 10; 100] |> List.map digits;; // [1;2;3]

Quando combini quelle composizione e amp; operatori di pipeline con funzioni di ordine superiore, puoi fare cose complicate in modo molto succinto:

let prodSqrtAbs = Seq.map (abs>>sqrt) >> Seq.reduce (*)
prodSqrtAbs [| -9.0; 4.0 |];;  // 6.0

EDIT : ho appena letto di J e del suo operatore fork implicito. È molto potente. Puoi creare operatori equivalenti di ordine superiore in F #, ma non verranno applicati implicitamente. Quindi, ad esempio, prima definire lift (usando argomenti espliciti)

let lift op a b x = op (a x) (b x)

e quindi applicarlo esplicitamente

let avg = lift (/) List.sum List.length

per ottenere qualcosa di simile a l'esempio J sulla pagina Wikipedia a cui ti sei collegato. Ma non è del tutto "tacito."

Altri suggerimenti

Certo. Tutto ciò che serve è la composizione delle funzioni e il curry, ed entrambi sono possibili in F #.

let compose f1 f2 = fun x -> f1 (f2 x);;
let digits = compose String.length string_of_int;;
digits 9000;; // 4
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top