gpt4 book ai didi

haskell - FP 对表达式的操作

转载 作者:行者123 更新时间:2023-12-02 03:52:23 27 4
gpt4 key购买 nike

我的问题是引用 this post ,具体来说:

data Actions a = Actions {
actEval :: a,
actMap :: (a -> a) -> Actions a }

我对 actMap 函数的递归定义感到困惑,因为它递归地返回对 Actions 的引用,即递归的基本情况是什么,因为没有为 a 指定的类型?

如何在 Common Lisp 中表示 Actions 结构?

编辑:此外,Actions 构造函数采用 2 个参数(如原帖中所述)。那么 actMap 返回的 Actions a 是什么??

最佳答案

首先不要混淆类型构造函数和数据构造函数。

data Actions a = ..

这里的 Actions 是一个类型构造函数。它接受类型 a 并给出类型 Actions a

data Actions a = Actions ..

第二个Actions 是一个数据构造函数。因此,要构造 Actions a 类型的值,您需要使用数据构造函数 Actions 和两个值,一个是 a 类型,另一个是 (a -> a) -> Action a

Actions 的定义在类型方面是递归的,这并不意味着您需要有一个基本案例。您可以将上述类型的值构造为

construct :: a -> Actions a
construct v = Actions v (\fn -> construct $ fn v)

这是一个有效的构造,因为数据构造函数的第一个值是 a 类型,另一个是上述指定类型的函数。

关于haskell - FP 对表达式的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13866731/

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