gpt4 book ai didi

haskell - Haskell 中的替换算法

转载 作者:行者123 更新时间:2023-12-02 17:33:13 25 4
gpt4 key购买 nike

我正在尝试用 Haskell 编写替换算法。我已经用单个构造函数 S::[(String, a)] -> Subst a 定义了一个多态数据类型 Subst a ,如下所示:

data Subst a = S [(String, a)]

我现在想编写一个函数 single::String -> a -> Subst a 来构造仅单个变量的替换

这是我尝试过的:

single::String -> a -> Subst a
single s1 (Subst a) = s1 a

但是,我收到此错误:不在范围内:数据构造函数“Subst”

有人知道我做错了什么吗?

最佳答案

数据构造函数与类型构造函数不同

在您的代码中,类型构造函数Subst数据构造函数S

类型构造函数用于创建新类型,例如在 data Foo = Foo (Maybe Int)Maybe 是一个 type 构造函数,Foo 是数据构造函数(如以及类型构造函数,但正如您发现的那样,它们可以以不同的方式命名)。 Data 构造函数用于创建类型的实例(也不要将其与创建多态类型的实例混淆,例如 Int -> Int 的实例>a -> a)。

因此,当您想在 single 函数中进行模式匹配时,需要使用 S 。不是Subst

希望这是有道理的,如果没有,请告诉我:)

附注出于所有意图和目的,数据构造函数都是函数,这意味着您可以使用它们执行通常使用函数执行的操作。例如。您可以执行map Bar [a,b,c],它会将数据构造函数应用于每个元素。

关于haskell - Haskell 中的替换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237527/

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