2016-08-30 7 views
2

以下の関数createTupleをpointfreeで表現することはできますか?あなたが利用可能であるだけで何使ってcreateTuple関数を記述することはできませんのでタプルポイントを作成する

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

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

Haskel/Elmのような '(、)'演算子を意味しますか? –

答えて

8

F#のライブラリは、(それはF#のを書いて、特に慣用的な方法ではない主な理由は)ポイントフリースタイルでコードを書くために多くの機能を提供していませんコアライブラリ。

あなた本当にはこれをやってみたかった場合、あなたはタプルを操作するためのヘルパーコンビネータのカップルを定義することができます。

:これらで

/// 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) 

を、あなたはポイントのない方法であなたの機能を実装することができ

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

これは、お使いの機能と同じことを行います。私はここで何が起こっているのかを解読することは非常に難しいと思うし、実際にそのコードを書くことは決してないだろうが、それは別の問題である。

+0

まさに私が欲しかったこと、ありがとう! – rickythefox

関連する問題