gpt4 book ai didi

list - 您可以使用 (==) <*> reverse 找出列表是否为回文。它是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 08:16:26 24 4
gpt4 key购买 nike

我已经尝试使用类型来完成这个过程,但我仍然难以理解它是如何工作的。

给定:

> :t (==)
(==) :: Eq a => a -> a -> Bool

> :t (<*>)
(<*>) :: Applicative f => f (a -> b) -> f a -> f b

> :t reverse
reverse :: [a] -> [a]

> :t (==) <*> reverse
(==) <*> reverse :: Eq a => [a] -> Bool

凭直觉,我可以理解它将相等运算符与反向组合在一起,从而创建一个函数来检查反向列表是否等于原始列表,但这实际上并没有比已经非常明显的信息更多的信息。

有人可以更详细地分析这里实际发生的事情的内部结构吗?

最佳答案

(<*>) 的类型开始

> : t (<*>)
(<*>) :: Applicative f => f (a -> b) -> f a -> f b

现在(->) kApplicative 的实例, 与实现

instance Applicative ((->) k) where
pure a = \_ -> a
f <*> g = \k -> f k (g k)

特别是 (<*>) 的类型专业(->) k

(<*>) :: (k -> a -> b) -> (k -> a) -> (k -> b)

所以申请(==) <*> reverse

(==) <*> reverse = \k -> (==) k (reverse k)
= \k -> k == reverse k

即它检查一个列表是否等于它的反向。

关于list - 您可以使用 (==) <*> reverse 找出列表是否为回文。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37551981/

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