代数效应和代数数据类型里的代数是指的什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Leviathann

代数效应和代数数据类型里的代数是指的什么?

  •  
  •   Leviathann Jul 19, 2021 via iPhone 1176 views
    This topic created in 1742 days ago, the information mentioned may be changed or developed.
    这个术语看过去完全摸不着头脑
    4 replies    2021-07-20 10:49:36 +08:00
    GuuJiang
        1
    GuuJiang  
       Jul 19, 2021   1
    代数是研究结构的学科,以代数系统为例,给定一个集合,定义若干种运算,就构成了一个代数系统,按照这些运算的性质进一步归类为一些特殊的代数系统,例如群、环、域等等,代数最大的特点就是抽象,虽然学习过程中会先从一些熟悉的具体的例子开始,例如自然数的加法和乘法构成的代数系统等,但是代数系统本身并不局限于具体事物,而是关注抽象的事物之间的联系,用程序来类比的话有点面向接口而非面向实现的这个意思在里面
    你题目中说的代数数据类型,因为不清楚上下文,姑且以我自己知道的 haskell 来举例,由于可以给类型定义“加法”、“乘法”等运算,从而可以证明 haskell 的类型构成了一个代数系统,既然构成一个代数系统,那么已知的代数系统里满足的性质类型系统自然也都满足,从而可以推导出一些有趣的结论
    codehz
        2
    codehz  
       Jul 19, 2021 via Android
    就是抽象代数里用到的那些东西,具体解释起来还是比较繁琐的,建议直接看抽象代数的书(
    namelosw
        3
    namelosw  
       Jul 20, 2021   2
    代数数据类型 / Algebraic Data Types 其实很简单,就是类型建模的时候,值域和代数相关,也就是加法乘法(笛卡尔积)之类的:

    1. Choice = A | B | C | D:
    「|」能力类似于 enum,有时候称作「和类型」或「并集类型」
    逻辑上对应「或」,也就是「 A 或 B 或 C 或 D 」
    值域大小为 1 + 1 + 1 + 1 = 4

    2. Answer(Chioce, Boolean):
    有两个字段,有字段的话,能力有点类似 struct,一般称作 Product Type 「积类型」
    逻辑上对应「且」,也就是有 fieldA 且 有 fieldB,像 TypeScript 和 Scala 之类的还有「&」操作符效果类似,称作 「交集类型」
    值域大小为 4 * 2 = 8

    3. Optional(Choice) = None | Some(Choice)
    有两个分支,一个和类型,一个积类型,值域
    值域大小为 1 + 4 * 1 = 5

    这样可以靠代数规则无限叠加,和类型里可以有积类型,积类型也能有和类型。相反 Java 的 Enum 里不能混 class 。
    如果你仔细看上面几个例子,就会发现编程语言,类型系统,逻辑系统,代数等等之间是有很多微妙关系的,如果你可以拧巴一点理解,就可以把「且」「或」这些逻辑系统套在上面,还可以把「和」「积」这些代数系统套在上面,还可以把「并集」「交集」这些集合论套在上面。这时候就引出了柯里-霍华德同构之类的话题。

    ---

    至于 Algebraic Effect 我就不太确定了,不过我刚才胡乱搜了搜看了看感觉还是跟类型理论沾边,至少从 React 的使用感受来说,直觉上是用代数的方式建模了 Effect,可以 reasoning,一可以 reasoning 应该就可以像上面反复拧巴到代数上来建模,而不像副作用一样无法控制。

    ---

    其实「代数」在编程圈用得也挺乱的,跟 Service 和 Component 这些没上下文不行的词一样。像 DDD 和 FP 结合的社区,经常会把对领域逻辑的建模叫做 Algebraic Modeling,实际上就是建模 DDD 的 Domain Model 。
    sghwn2
        4
    sghwn2  
       Jul 20, 2021
    矩阵
    About     Help     Advertise     Blog     API     FAQ     Solana     915 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:35 PVG 06:35 LAX 15:35 JFK 18:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86