8得票1回答
在Scheme(R6RS)中表示代数数据类型构造函数的惯用方式是什么?

我想知道将类Haskell的数据类型翻译为Scheme的最佳方法是什么。我的当前计划是使用vector来表示构造器,第一个元素是代表变体的label。例如,下面是一个Haskell程序: data Bits = O Bits | I Bits | E deriving Show ...

7得票1回答
代数数据类型的自下而上递归遍历

当处理较大的代数数据类型时,Haskell中存在一种特定的递归遍历方式,无法通过对数据类型进行折叠来捕获。例如,假设我有一个简单的数据类型,用于表示命题逻辑中的公式,并定义了一个在其上进行折叠的函数: type FAlgebra α φ = (φ, φ, --...

12得票2回答
值构造函数和元组有什么区别?

据说 Haskell 元组只是代数数据类型的不同语法。同样,有一些例子展示了如何使用元组重新定义值构造函数。 例如,在 Haskell 中,Tree 数据类型可以这样写: data Tree a = EmptyTree | Node a (Tree a) (Tree a) 这些内容可以...

8得票1回答
如何在不使用 .flatMap 的情况下控制流,防止破坏反应式流并阻止像 distinctUntilChanged 这样的操作符对整个流进行操作。

我希望针对不同的State实现处理不同的可观察链逻辑。可以通过使用密封类/代数数据类型/联合和.flatMap()轻松实现,但这会中断流,其中像.distinctUntilChanged()这样的运算符仅在.flatMap()函数内部起作用,而不是在整个流中起作用。 sealed class...

19得票1回答
如果禁止使用case class继承,该如何表示?

我正在尝试按照这篇文章中所述的方式创建案例类。sealed abstract case class Exp() case class Literal(x:Int) extends Exp case class Add(a:Exp, b:Exp) extends Exp case class S...

17得票3回答
函数式编程中除了单子之外,是否还使用任何代数结构?

我最近了解了函数式编程(在Haskell和Scala中)。它的能力和优雅非常迷人。 但是当我遇到单子Monad时,它使用了一个名为幺半群Monoid的代数结构,我感到惊讶和高兴,因为我一直在数学中学习的理论知识被应用于编程。 这个观察让我产生了一个问题:群、域或环(请参见代数结构了解其他结...

68得票4回答
Kotlin和区分联合类型(总和类型)

Kotlin有类似的判别式联合类型(求和类型)吗?如果有的话,这个(F#)的惯用Kotlin翻译是什么?type OrderMessage = | New of Id: int * Quantity: int | Cancel of Id: int let handleMes...

20得票2回答
数据结构区分,直觉建立

根据这篇论文,微分在数据结构中起作用。 根据这个回答: 微分,即数据类型D(表示为D')的导数是具有单个“空洞”的D结构类型,即不包含任何数据的特殊位置。这些结构遵循微积分中相同的规则,这是令人惊奇的。 这些规则如下: 1 = 0 X′ = 1 (F + G)′ = F' + G′...

14得票8回答
请确认或更正我对这个Haskell代码片段的"英文解释"

我是一名C#开发人员,正在阅读"Real World Haskell"这本书,以便真正理解函数式编程。这样当我学习F#时,我就可以真正领会它,而不仅仅是“用C#代码写F#代码”。 今天,我遇到了一个例子,我认为我已经理解了3次,然后才发现漏掉了某些东西,更新了我的解释,并递归(也诅咒过,相信...

12得票4回答
匿名记录类型在判别联合体中的应用

F#教程包括以下代码段:/// A record for a person's first and last name type Person = { First : string Last : string } /// define a discriminate...