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

时间:2015-05-04 11:10:59

标签: f# functional-programming

给出一般函数f:a->b->c

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

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

==

let transform1 (f:a->b->c) : (b->a->c) = 
?

3 个答案:

答案 0 :(得分:6)

您可以定义swap功能:

let swap f a b = f b a 

答案 1 :(得分:5)

您实际上可以从函数类型中了解如何执行此操作。

transform1的类型为(a -> b -> c) -> (b -> a -> c),或等效地为(a -> b -> c) -> b -> a -> c

所以你正在寻找的是一个需要

的功能
  • 我们称之为a -> b -> c
  • 的函数f
  • b
  • a
  • 然后"使用"使用fa b生成c

因为只有一种方法可以使用" f a和产生b c flip f b a = f a b 的{​​{1}}就是这样写的:

zone "domain1.com" {
        type slave;
        masters {10.10.10.1;};
        allow-notify{10.10.10.1;};
        allow-transfer {trusted;};
        key-directory "/usr/local/etc/namedb/";
        file "/usr/local/etc/namedb/domain1.com.external.signed";
};
zone "domain2.com" {
        type slave;
        masters {10.10.10.1;};
        allow-notify{10.10.10.1;};
        allow-transfer {trusted;};
        key-directory "/usr/local/etc/namedb/";
        file "/usr/local/etc/namedb/domain2.com.external.signed";
};

那就是它。

答案 2 :(得分:2)

在Haskell你会这样做:

g b a = f a b -- or using lambda expressions: (\b a -> f a b) 

所以在let声明中:let g = (\b a -> f a b) in ...