gpt4 book ai didi

scala - 范畴论中的 `filter`是什么态射?

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

在范畴论中,是filter操作被认为是态射?如果是,它是什么态射?示例(在 Scala 中)

val myNums: Seq[Int] = Seq(-1, 3, -4, 2)

myNums.filter(_ > 0)
// Seq[Int] = List(3, 2) // result = subset, same type

myNums.filter(_ > -99)
// Seq[Int] = List(-1, 3, -4, 2) // result = identical than original

myNums.filter(_ > 99)
// Seq[Int] = List() // result = empty, same type

最佳答案

看待这个问题的一种有趣方式是不选择 filter。作为一个原始概念。有一个名为 Filterable 的 Haskell 类型类。其中is aptly described as :

Like Functor, but it [includes] Maybe effects.

Formally, the class Filterable represents a functor from Kleisli Maybe to Hask.


“从 Kleisli Maybe Hask 的仿函数的态射映射被 mapMaybe 捕获。类的方法,确实是同名 Data.Maybe的泛化功能:
mapMaybe :: Filterable f => (a -> Maybe b) -> f a -> f b
类定律只是适当的仿函数定律(注意 Just(<=<) 分别是 Kleisli Maybe 中的恒等式和组合):
mapMaybe Just = id
mapMaybe (g <=< f) = mapMaybe g . mapMaybe f
类也可以用 catMaybes 表示...
catMaybes :: Filterable f => f (Maybe a) -> f a
...可与 mapMaybe 相互定义(参见 sequenceAtraverse 之间的类似关系)...
catMaybes = mapMaybe id
mapMaybe g = catMaybes . fmap g
... 并且相当于 之间的自然转换。哈斯克内仿函数 Compose f Maybef .
所有这些与你的问题有什么关系?首先,仿函数是范畴间的态射,自然变换是仿函数间的态射。既然如此,这里就可以在 less boring than the "morphisms in Hask" one 的意义上谈论态射。 .您不一定想这样做,但无论如何它是一个现有的有利位置。
其次, filter不出所料,它也是 Filterable 的一种方法,其默认定义为:
filter :: Filterable f => (a -> Bool) -> f a -> f a
filter p = mapMaybe $ \a -> if p a then Just a else Nothing
或者,使用 another cute combinator 进行拼写:
filter p = mapMaybe (ensure p)
这间接地给出了 filter在这个特定的分类概念中占有一席之地。

关于scala - 范畴论中的 `filter`是什么态射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595338/

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