gpt4 book ai didi

function - 重写一个非 curry 函数haskell

转载 作者:行者123 更新时间:2023-12-04 14:28:57 28 4
gpt4 key购买 nike

我一直在学习 uncurrying 和在 haskell 中应用 $ 函数,但我仍然在将 uncurried 函数转换为不那么神秘的东西时遇到问题。

我得到的功能是

apple = map $ uncurry $ flip ($)

我意识到这需要一个元组列表并将元组中的相应函数应用于内部变量。所以我试图将其重写为
apple ls = foldr function _ ls
where function (a,b) c = (uncurry b) (a,c)

我得到 _ 作为解析错误的错误,我不知道要使用哪个起点。我需要使这个多态,并且我意识到这很可能不会让它变得不那么神秘。有任何想法吗?他们将不胜感激

最佳答案

苹果有类型

apple :: [(a, a->b)] -> [b]

我们可以将其重写为
apple ls = map (\(a, f) -> f a) ls

所以用 foldr 写这个非常可行,
apple ls = foldr (\(a, f) rest -> f a : rest) [] ls

或者,我们可以将其重写为 pointfree
apple = foldr ( (:) . (uncurry . flip $ ($)) ) []

解析错误的原因是 _是“我不关心的变量”的特殊语法。这让你写的东西像
 foo _ _ _ _ a = a

并且不会得到关于重复变量的错误。基本上我们只是填写 _带有起始空列表并固定 function使其附加到 c而不是试图将其应用于 a .

如果我想以最清晰的方式写这个,那么原来的
apple = map . uncurry . flip $ ($)

相当不错。

关于function - 重写一个非 curry 函数haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19555035/

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