创建一个元组pointfree

时间:2016-08-30 14:39:10

标签: f# pointfree

下面的函数createTuple可以无点表示吗?

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

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

1 个答案:

答案 0 :(得分:8)

F#库没有提供很多用于以无点样式编写代码的函数(主要是因为它不是特别习惯于编写F#的方式),因此你无法使用可用的函数来编写createTuple函数。核心库。

如果真的想要这样做,你可以定义一些辅助组合器来处理元组:

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

这与你的功能完全相同。我认为解读这里发生的事情要难得多,而且我永远不会真正编写代码,但这是另一个问题: - )。