gpt4 book ai didi

haskell - 与二元运算符的组合?

转载 作者:行者123 更新时间:2023-12-04 05:04:53 25 4
gpt4 key购买 nike

我想做一些相当简单的事情;
我将运算符 (++) 与 Data.Map insertWith 一起使用,它工作正常,但我想消除创建的值中的重复项,所以想用 nub 组合它。

我试过 (nub (++)), (nub $ (++)), (nub . (++)),都无济于事,因为 (++) 的类型与预期的 nub 类型不匹配( [一个] )。

我当然可以定义一个辅助函数或 lambda,但我认为可能有一个更清晰的组合。

请提示!

最佳答案

你可以这样写

((nub .) .) (++)

例子:
Prelude Data.List> ((nub .) .) (++) [1,2,3] [3,4,5]
[1,2,3,4,5]

一般来说,你有
(f . ) g x = f (g x) 
((f . ) . ) g x y = f (g x y)
(((f . ) . ) . ) g x y z = f (g x y z)
((((f . ) . ) . ) . ) g x y z v = f (g x y z v)
...

这是 ((nub .) .) 的这个身份的推导:
(f . g) x = f (g x)

(nub .) :: Eq a1 => (a -> [a1]) -> a -> [a1]
(nub .) = \g x -> (nub (g x))

((nub .) .) :: Eq a2 => (a -> a1 -> [a2]) -> a -> a1 -> [a2]
((nub .) .) = ((\g x -> (nub (g x))) .) = (\g' x' -> (\g x -> (nub (g x))) (g' x'))
= \g' x' x -> (nub ((g' x') x))

有一个 nice article关于这个(和相关的)成语,但它是俄语的:-(

关于haskell - 与二元运算符的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599119/

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