2016-08-30 4 views
2

Kann die folgende Funktion createTuple pointfree ausgedrückt werden?Erstellen eines Tupelpunktes frei

let createTuple = fun v -> (v, v*2) 

createTuple 2 |> printfn "%A" // (2,4) 
+0

Meinst du den '(,)' Operator, wie in Haskel/Elm? –

Antwort

8

Die # Bibliothek F bietet keine viele Funktionen zur Code in Punkt-freien Art zu schreiben (vor allem, weil es zu schreiben F # nicht besonders idiomatischer Weg ist), so dass Sie nicht Ihre createTuple Funktion schreiben können genau das, was in verfügbar ist die Kernbibliothek.

Wenn Sie wirklich dies tun wollten, könnten Sie ein paar Helfer Kombinatoren für die Arbeit mit Tupel definieren:

/// Duplicates any given value & returns a tuple with two copies of it 
let dup a = a, a 
/// Transforms the first element using given function 
let mapFst f (a, b) = (f a, b) 
/// Transforms the second element (not needed here, but adding for symmetry) 
let mapSnd f (a, b) = (a, f b) 

Mit diesen können Sie Ihre Funktion in einem Punkt freien Art und Weise implementieren könnte:

let createTuple = dup >> mapSnd ((*) 2) 

Dies funktioniert genauso wie Ihre Funktion. Ich denke, es ist wesentlich schwieriger zu entziffern, was hier vor sich geht, und ich würde diesen Code niemals wirklich schreiben, aber das ist ein anderes Thema :-).

+0

Genau das, was ich wollte, danke! – rickythefox