gpt4 book ai didi

f# 获取可能的可区分联合项的列表

转载 作者:行者123 更新时间:2023-12-03 09:40:10 26 4
gpt4 key购买 nike

我正在创建一个带有多个可区分联合 (DU) 的简单 DSL。有构建块 DU,较高的 DU 构建在较低的 DU 之上。

现在我想创建 UI,用户可以在其中构建与我的 DSL 匹配的文本。到 UI 我不想表达我的完整语法,但只显示可以完成的可能操作。所以我需要一种方法来从我的分层 DU 中找出用户可以执行的其他可能状态。

示例输入文本 (1 + (2 * 3))

type Expression =
| Constant of int
| Add of Expression * Expression
| Mul of expression * Expression

所以当用户启动时,我必须返回一个列表,只说 Constant可以使用。
当用户通过 (constant ) 作为他当前的状态时,我必须告诉你可以 add/Mul (这是表达式)等等。

我想表示一个结构,它以一种类型安全的方式表示当前状态和可能的状态。有没有办法在f#中解决这类问题

最佳答案

我认为您正在寻找 FSharpType.GetUnionCases .您可以按如下方式使用它:

open System
open Microsoft.FSharp.Collections
open Microsoft.FSharp.Reflection

type Expression =
| Constant of int
| Add of Expression * Expression
| Mul of Expression * Expression

typeof<Expression> |> FSharpType.GetUnionCases|> Dump |> ignore

LinqPad 用于上述 here

关于f# 获取可能的可区分联合项的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com