2016-08-30 4 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

관련 문제