问题标签 [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.
f# - 如何在 F# 中枚举有区别的联合?
如何枚举 F# 中受歧视联合的可能“值”?
我想知道是否有类似Enum.GetValues(Type)
歧视工会的东西,我不确定我会列举什么样的数据。我想为每个选项生成一个带有一个项目的可区分联合列表或数组。
.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?
.net - 与区分联合相比,在 F# 中使用记录类型时的详细程度更高
如果我选择使用 Method 区分联合,那么事情会更简洁:
我相信在 F# 中使用记录类型时无法避免这种冗长。我对吗?
.net - 为 F# 中的小型 AST 选择是否使用可区分联合或记录类型
假设我正在实现一个非常简单的玩具语言解析器。我正在决定是使用 DU 还是记录类型(可能两者兼而有之?)。语言的结构是:
这种简单语言的程序示例:
您将如何对此进行建模,为什么?
.net - F# 中是否允许在受歧视的工会中相互引用案例?
以下有区别的联合无法编译:
显示的错误是
关于最后一个工会案件。
我已经尝试Expression
使用该rec
属性进行标记,但这似乎无济于事。
有解决办法吗?更好的是,提到的原因是我麻烦的原因吗?
c# - F# 可区分联合与 C# 类层次结构
我有以下代码:
我想知道它是否是 F# 的一个很好的翻译
??
f# - 可区分联合中的不可变字段
我知道可以将方法和属性添加到有区别的联合,但是您可以添加一个在创建联合的实例时必须设置的不可变字段,就像记录中的字段一样?
我想我想做的是结合联合类型和记录类型,如下所示:
这不是一个有效的声明。
我知道这可以通过创建记录类型来解决:
但如果可能的话,我想做类似于第一个例子的事情。
f# - 比较受歧视的工会
我是 F# 的新手,我正在玩 FParsec。我会使用 FParsec 来生成 AST。我想使用 FsUnit 围绕解析器的各个部分编写一些测试,以确保正确运行。
我在语法上遇到了一些问题(抱歉,确切的代码正在工作,我可以稍后发布一个具体示例)那么究竟如何比较两个有区别的联合(一个是预期的,另一个是实际结果)?有人可以提供一个使用 FsUnit(或 NUnit)的小代码示例吗?
判别联合的例子(很简单)
f# - 打印 F# 可区分联合
我正在编写一个 F# 程序,它将一个字符串解析为一个 AST 类型,它是一个有区别的联合。
当我使用fsi
(在 Mono + Mac OS X 上)运行我的代码时,AST 以很好的格式打印出来。但是当我使用时,printfn "%s" <| ast.ToString()
我会得到类似FSI_0002.Absyn+clazz
. 为所有可区分的联合类型编写ToString
方法将是一件大事。
如何以这种方式打印值fsi
?
f# - 在 F# 中转换抽象语法树 (AST)
我正在尝试为决策逻辑表设计 AST。我希望能够对代表我的 AST 的有区别的联合做的一件事是出于不同的原因转换它的一部分。为了清楚起见,我会给你一个例子
决策逻辑表
@VAR = 10 ;Y;
上面的内容可以理解为只有一个规则,并且条件 VAR = 10 通过 Y 条目进入该规则。
抽象语法树定义(为本示例简化)
渲染(转换前)
渲染(转换后)
现在我想做的是转换上面的树以扩展条目中表示的规则。我的想法是我可以使用递归函数和模式匹配来做到这一点,但我现在很难理解它。
我想本质上我想要做的是每当我看到 ConditionEntries 节点时,我想为 Entries 列表中的每个字符串发出一个新规则,其中 Condition 与 Entry 结合。这有任何意义吗?
提前感谢您的任何建议。
ps 我还没有完全尝试编译上面的例子,所以请原谅任何语法错误。