gpt4 book ai didi

haskell - 部分应用函数 n 次

转载 作者:行者123 更新时间:2023-12-01 08:58:20 25 4
gpt4 key购买 nike

假设

f x y z = x*y*z

然后我希望对列表中的每个成员返回 f 的应用 3 次

foldl ($) f [1,2,3]

类似于 (((f 1) 2) 3) = 1*2*3 = 6

函数 f 将是累加器,折叠的每次迭代都会应用一个参数并返回一个部分应用的函数作为下一个累加器。

为什么这不起作用?是不是因为 f 在迭代时改变了类型?

顺便说一句:有没有其他方法可以完成这种类型的功能应用?

最佳答案

类型看起来像

foldl :: (a -> b -> a) -> a -> [b] -> a

($) :: (x -> y) -> x -> y

要将 foldl 应用于 ($) 需要将 foldl 的第一个参数的类型与($)。也就是解方程

a -> b -> a  =  (x -> y) -> x -> y

这会立即导致

a = x -> y
b = x
a = y

将第二个和第三个方程代入第一个方程:

a = b -> a

问题在于 Haskell 没有类型可以解决这个等式。特别是,不可能用有限数量的符号写出一个解决方案!它首先扩展到

a = b -> b -> a

然后

a = b -> b -> b -> a

并且永远。所以没有办法为类型变量选择类型来使其匹配,GHC会大声提示。

关于haskell - 部分应用函数 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639532/

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