如何在定义的F#函数中交换应用程序的顺序?

Sam*_*Sam 2 f# functional-programming

鉴于一般功能 f:a->b->c

我想创建一个函数,它执行与f相同的事情/计算,但是交换了两个输入参数(或currying命令)的顺序.

所以寻找完全相同的计算g:b->a->c在哪里gf

==

let transform1 (f:a->b->c) : (b->a->c) = 
?
Run Code Online (Sandbox Code Playgroud)

Dan*_*ian 6

您可以定义一个swap函数:

let swap f a b = f b a 
Run Code Online (Sandbox Code Playgroud)


mol*_*ilo 5

您实际上可以从函数的类型告诉如何执行此操作.

transform1具有类型(a -> b -> c) -> (b -> a -> c)或等效地(a -> b -> c) -> b -> a -> c.

所以你要找的是一个需要的功能

  • a -> b -> c我们称之为的功能f,
  • 和一个b,
  • 和一个a,
  • 然后"使用" fab,以产生一个c.

由于只有"用"的一种方式fab产生一个c你写的一路下滑:

flip f b a = f a b
Run Code Online (Sandbox Code Playgroud)

就是这样.