问题标签 [discriminated-union]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5272 浏览

f# - 如何在 F# 中枚举有区别的联合?

如何枚举 F# 中受歧视联合的可能“值”?

我想知道是否有类似Enum.GetValues(Type)歧视工会的东西,我不确定我会列举什么样的数据。我想为每个选项生成一个带有一个项目的可区分联合列表或数组。

0 投票
2 回答
2370 浏览

.net - Use of the and keyword in F# in discriminated unions

I was faced today with the following DUs declarations:

Why would one use the keyword and instead of type, here?

0 投票
1 回答
268 浏览

.net - 与区分联合相比,在 F# 中使用记录类型时的详细程度更高

如果我选择使用 Method 区分联合,那么事情会更简洁:

我相信在 F# 中使用记录类型时无法避免这种冗长。我对吗?

0 投票
2 回答
371 浏览

.net - 为 F# 中的小型 AST 选择是否使用可区分联合或记录类型

假设我正在实现一个非常简单的玩具语言解析器。我正在决定是使用 DU 还是记录类型(可能两者兼而有之?)。语言的结构是:

这种简单语言的程序示例:

您将如何对此进行建模,为什么?

0 投票
2 回答
170 浏览

.net - F# 中是否允许在受歧视的工会中相互引用案例?

以下有区别的联合无法编译:

显示的错误是

关于最后一个工会案件。

我已经尝试Expression使用该rec属性进行标记,但这似乎无济于事。

有解决办法吗?更好的是,提到的原因是我麻烦的原因吗?

0 投票
2 回答
931 浏览

c# - F# 可区分联合与 C# 类层次结构

我有以下代码:

我想知道它是否是 F# 的一个很好的翻译

??

0 投票
3 回答
346 浏览

f# - 可区分联合中的不可变字段

我知道可以将方法和属性添加到有区别的联合,但是您可以添加一个在创建联合的实例时必须设置的不可变字段,就像记录中的字段一样?

我想我想做的是结合联合类型和记录类型,如下所示:

这不是一个有效的声明。

我知道这可以通过创建记录类型来解决:

但如果可能的话,我想做类似于第一个例子的事情。

0 投票
2 回答
1778 浏览

f# - 比较受歧视的工会

我是 F# 的新手,我正在玩 FParsec。我会使用 FParsec 来生成 AST。我想使用 FsUnit 围绕解析器的各个部分编写一些测试,以确保正确运行。

我在语法上遇到了一些问题(抱歉,确切的代码正在工作,我可以稍后发布一个具体示例)那么究竟如何比较两个有区别的联合(一个是预期的,另一个是实际结果)?有人可以提供一个使用 FsUnit(或 NUnit)的小代码示例吗?

判别联合的例子(很简单)

0 投票
3 回答
2129 浏览

f# - 打印 F# 可区分联合

我正在编写一个 F# 程序,它将一个字符串解析为一个 AST 类型,它是一个有区别的联合。

当我使用fsi(在 Mono + Mac OS X 上)运行我的代码时,AST 以很好的格式打印出来。但是当我使用时,printfn "%s" <| ast.ToString()我会得到类似FSI_0002.Absyn+clazz. 为所有可区分的联合类型编写ToString方法将是一件大事。

如何以这种方式打印值fsi

0 投票
1 回答
1000 浏览

f# - 在 F# 中转换抽象语法树 (AST)

我正在尝试为决策逻辑表设计 AST。我希望能够对代表我的 AST 的有区别的联合做的一件事是出于不同的原因转换它的一部分。为了清楚起见,我会给你一个例子

决策逻辑表

@VAR = 10 ;Y;

上面的内容可以理解为只有一个规则,并且条件 VAR = 10 通过 Y 条目进入该规则。

抽象语法树定义(为本示例简化)

渲染(转换前)

渲染(转换后)

现在我想做的是转换上面的树以扩展条目中表示的规则。我的想法是我可以使用递归函数和模式匹配来做到这一点,但我现在很难理解它。

我想本质上我想要做的是每当我看到 ConditionEntries 节点时,我想为 Entries 列表中的每个字符串发出一个新规则,其中 Condition 与 Entry 结合。这有任何意义吗?

提前感谢您的任何建议。

ps 我还没有完全尝试编译上面的例子,所以请原谅任何语法错误。