gpt4 book ai didi

Haskell 到 F# - 在 f# 中声明递归类型

转载 作者:行者123 更新时间:2023-12-04 16:37:29 27 4
gpt4 key购买 nike

我正在尝试通过移植一些 Haskell 代码来自学 F#。

具体来说,我正在尝试移植显示的倒计时问题 here

Haskell 代码已列出 here

我正在尝试在 F# 中创建以下 Haskell 类型:

data Op      = Add | Sub | Mul | Div

data Expr = Val Int | App Op Expr Expr

在 F# 中,我认为 Op 类型定义如下:
type Op = | Add | Sub | Mul | Div

我遇到了 Expr 类型的问题。

如何创建递归类型?来自 this SO question看起来不能在 F# 中创建 Expr 类型。

还有什么是“App”类型的 F# 等价物,它将 Op 类型应用于 Expr 类型。

如果无法直接移植此代码,有人可以建议替代数据结构。

最佳答案

像这样定义递归类型不是问题;您不能做的是创建更高级的类型,这些类型通过类型构造函数进行参数化(并且在本示例中不需要)。对于任何联合类型定义,您都需要使用关键字“of”将构造函数名称与构造函数参数分开,并且参数本身应采用元组类型的形式(即它们应以星号分隔):

type Op = Add | Sub | Mul | Div
type Expr = Val of int | App of Op * Expr * Expr

关于Haskell 到 F# - 在 f# 中声明递归类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917091/

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