gpt4 book ai didi

f# - 从文件/数据库创建可区分的联合数据

转载 作者:行者123 更新时间:2023-12-02 22:15:21 25 4
gpt4 key购买 nike

我有一个像这样的表达式的可区分联合 (EQ =; GT >; etc)

  (AND (OR (EQ X 0)
(GT X 10))
(OR (EQ Y 0)
(GT Y 10)))

我想从保存在文件/数据库中的此类表达式创建 DU 的实例。我该怎么做?如果不可行,在 F# 中处理它的最佳方法是什么?

Daniel:这些表达式以前缀格式(如上所述)保存为文本,并将在 F# 中进行解析。谢谢。

最佳答案

如果您只是想知道如何使用 DU 对这些表达式建模,这里有一种方法:

type BinaryOp =
| EQ
| GT

type Expr =
| And of Expr * Expr
| Or of Expr * Expr
| Binary of BinaryOp * Expr * Expr
| Var of string
| Value of obj

let expr =
And(
Or(
Binary(EQ, Var("X"), Value(0)),
Binary(GT, Var("X"), Value(10))),
Or(
Binary(EQ, Var("Y"), Value(0)),
Binary(GT, Var("Y"), Value(10))))

现在,这可能太“松散”了,即它允许像 And(Value(1), Value(2)) 这样的表达式,根据您的语法,这可能是无效的。但这应该让您了解如何处理它。

还有一些good examples在 F# 编程 wikibook 中。

如果你需要解析这些表达式,我强烈推荐FParsec .

关于f# - 从文件/数据库创建可区分的联合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14569582/

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