如何从接收到的函数中拆分参数
How do I split the parameters from a received function
我需要为以下函数编写定义:
f :: c -> (c -> a -> b) -> (a, [a]) -> ([b], b)
它接收一个元素 c 和一个函数 g(即 (c->a->b))。
f c g = ???
所以在我看来这个函数 g 接收一个 c 而 returns 一个函数接收一个 a 并且 returns 接收一个 b。它可能是一个接收 c 和 a 以及 returns a b 的函数,但是 a 从哪里来?
f :: c -> (c -> (a -> b)) -> (a, [a]) -> ([b], b)
所以我有 c,我可以将其输入 g 并取回函数 (a->b)。我如何拆分它们以便 return 元组 (a, [a]) 和 ([b], b)?
实现是
f c g = \(x, xs) -> (map (g c) xs, (g c) x)
谢谢@Bergi。
首先,a、b 和 c 是类型而不是值,例如函数 id(它接收一个参数并且 returns 它没有做任何改变 Ex:id 4
是 4 ) 具有类型签名:
id :: c -> c
也就是说它接收了一个c类型的参数,return接收了一个c类型的值。
那么,下面的类型签名是什么意思?
func :: a -> b -> b
表示func
接收两个参数,一个是a类型,一个是b类型,return是一个b类型的值,因为只有最后一个类型是return 类型。
如果你想要一个 return 的函数,它看起来像这样:
func2 :: a -> (b-> b)
func2
取一个类型 a 的值,returns 一个函数,它转而取一个类型 b 的值,returns 一个类型 b 的值。
所以 f (f :: c -> (c -> (a -> b)) -> (a, [a]) -> ([b], b)
) 的类型签名告诉我们 f 接受 3 个参数:一个是 c 类型,一个是接受类型 c 值的函数,returns 是一个接受 a 类型的函数类型 a 的值和 returns 类型 b 的值,另一个是元组(在本例中为一对),由类型 a 的值和类型为 a 的值列表组成,最后是 returns 一个元组,由一个类型为 b 的值列表和一个类型为 b 的值组成。
此外,[a]
表示类型 a 值的列表,(a1,a2....an)
是一个元组(有点像固定大小的列表),(a,b)
具体是由类型 a 的值和b.
类型的值
我需要为以下函数编写定义:
f :: c -> (c -> a -> b) -> (a, [a]) -> ([b], b)
它接收一个元素 c 和一个函数 g(即 (c->a->b))。
f c g = ???
所以在我看来这个函数 g 接收一个 c 而 returns 一个函数接收一个 a 并且 returns 接收一个 b。它可能是一个接收 c 和 a 以及 returns a b 的函数,但是 a 从哪里来?
f :: c -> (c -> (a -> b)) -> (a, [a]) -> ([b], b)
所以我有 c,我可以将其输入 g 并取回函数 (a->b)。我如何拆分它们以便 return 元组 (a, [a]) 和 ([b], b)?
实现是
f c g = \(x, xs) -> (map (g c) xs, (g c) x)
谢谢@Bergi。
首先,a、b 和 c 是类型而不是值,例如函数 id(它接收一个参数并且 returns 它没有做任何改变 Ex:id 4
是 4 ) 具有类型签名:
id :: c -> c
也就是说它接收了一个c类型的参数,return接收了一个c类型的值。 那么,下面的类型签名是什么意思?
func :: a -> b -> b
表示func
接收两个参数,一个是a类型,一个是b类型,return是一个b类型的值,因为只有最后一个类型是return 类型。
如果你想要一个 return 的函数,它看起来像这样:
func2 :: a -> (b-> b)
func2
取一个类型 a 的值,returns 一个函数,它转而取一个类型 b 的值,returns 一个类型 b 的值。
所以 f (f :: c -> (c -> (a -> b)) -> (a, [a]) -> ([b], b)
) 的类型签名告诉我们 f 接受 3 个参数:一个是 c 类型,一个是接受类型 c 值的函数,returns 是一个接受 a 类型的函数类型 a 的值和 returns 类型 b 的值,另一个是元组(在本例中为一对),由类型 a 的值和类型为 a 的值列表组成,最后是 returns 一个元组,由一个类型为 b 的值列表和一个类型为 b 的值组成。
此外,[a]
表示类型 a 值的列表,(a1,a2....an)
是一个元组(有点像固定大小的列表),(a,b)
具体是由类型 a 的值和b.