fromEnum -6ren">
gpt4 book ai didi

haskell - 如何简化这个表达式?

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

考虑一下:

map fromEnum $ zipWith (==) "aaaa" "abaa"
-- [1,0,1,1]

如果这里只有一步就好了:

zipWith (\x y -> fromEnum (x == y)) "aaaa" "abaa"

现在我可以消除y:

zipWith (\x -> fromEnum.(x ==)) "aaaa" "abaa"

但我未能消除x。当然“作弊”也是有办法的……

zipWith (curry (fromEnum . uncurry (==))) "aaaa" "abaa"

...但这看起来比原来的 lambda 更难看。

我寻找的函数有点类似于Data.Function.on,但“相反”。我感觉有一个非常简单的解决方案可以解决这个问题。我是否忽略了什么?

最佳答案

zipWith (\x -> fromEnum . (x ==)) "aaaa" "abaa"

可以写成

zipWith (\x -> (fromEnum .) (x ==)) "aaaa" "abaa"

可以写成

zipWith ((fromEnum .) . (==)) "aaaa" "abaa"

如果你觉得这篇文章可读性取决于品味,我想。

编辑:另一个好方法是使用 some combinators by Matt Hellige :

zipWith ((==) $. id ~> id ~> fromEnum) "aaaa" "abaa"

关于haskell - 如何简化这个表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661341/

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