给出一般函数f:a->b->c
我想创建一个函数来执行与f相同的事情/计算,但是交换了两个输入参数(或currying命令)的顺序。
所以寻找g:b->a->c
g
与f
完全相同的计算
==
let transform1 (f:a->b->c) : (b->a->c) =
?
答案 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
,f
和a
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 ...