gpt4 book ai didi

haskell - Haskell 中的旋转参数

转载 作者:行者123 更新时间:2023-12-02 14:32:48 25 4
gpt4 key购买 nike

Haskell 中的 flip 函数用于交换函数前两个参数的位置:

flip :: (a -> b -> c) -> b -> a -> c
flip f y x = f x y

类似地,我们可以编写一个函数来旋转三个参数:

rot :: (a -> b -> c -> d) -> b -> c -> a -> d
rot f y z x = f x y z

这个概念可以扩展到柯里化(Currying)任意数量参数的函数吗?

给定一个类型为 a -> ... -> z 的函数,是否可以编写以下类型的函数?

(a -> ... -> z) -> ... -> a -> z

我知道 -> 运算符是右结合的。因此 ... -> z 无法拆分。尽管如此,我还是想确切地知道。

最佳答案

你是对的,你不能这样做。您必须对任意数量的参数进行模式匹配,但没有办法做到这一点。

您可以使用 Template Haskell 为不同的数量生成一组旋转函数,但您总是必须提前决定生成多少个,而且它不是真正的通用函数,只是编写它们的快捷方式.

如果你的函数碰巧将它们的参数作为列表(eew),你可以做类似的事情,但这也有一个明显的缺点,即要求参数类型是同质的。

关于haskell - Haskell 中的旋转参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com