相关疑难解决方法(0)

"编程代码"在编程环境中意味着什么?

我在函数式编程和PLT圈子中多次听到过"enggebras"这个术语,特别是在讨论对象,comonads,镜头等时.谷歌搜索这个术语给出了对这些结构进行数学描述的页面,这对我来说几乎是不可理解的.任何人都可以解释一下代数在编程环境中的意义,它们的意义是什么,以及它们与对象和共同体的关系?

haskell functional-programming scala category-theory recursion-schemes

334
推荐指数
4
解决办法
3万
查看次数

什么构成除列表以外的类型的折叠?

考虑一个单链表.它看起来像

data List x = Node x (List x) | End
Run Code Online (Sandbox Code Playgroud)

定义折叠函数是很自然的

reduce :: (x -> y -> y) -> y -> List x -> y
Run Code Online (Sandbox Code Playgroud)

从某种意义上说,reduce f x0替代每一个Nodef一位Endx0.这就是Prelude所说的折叠.

现在考虑一个简单的二叉树:

data Tree x = Leaf x | Branch (Tree x) (Tree x)
Run Code Online (Sandbox Code Playgroud)

定义诸如的函数同样很自然

reduce :: (y -> y -> y) -> (x -> y) -> Tree x -> y
Run Code Online (Sandbox Code Playgroud)

请注意,这种减少具有完全不同的特征; 而基于列表的一个本质上是顺序的,这个新的基于树的一个具有更多的分而治之的感觉.你甚至可以想象par在那里扔几个组合器.(你会在列表版本中放置这样的东西?)

我的问题:这个功能是否仍被归类为"折叠",还是其他东西?(如果是的话,它是什么?)

基本上每当有人谈论折叠时,他们总是谈论折叠列表 …

haskell functional-programming terminology fold

64
推荐指数
4
解决办法
8203
查看次数