gpt4 book ai didi

Haskell 风格 : Pattern matching vs. 更直观的解决方案

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

我刚刚开始使用 Haskell,所以我正试图围绕“Haskell 的思维方式”展开思考。有没有理由使用模式匹配来解决问题1 here基本上是通过展开整个列表并递归调用函数,而不是像 myLast lst = lst 那样直接检索最后一个元素! ((长度 lst) - 1)?这看起来几乎是蛮力的,但我认为这只是我对这里的不熟悉。

最佳答案

我能想到的几点:

  • (!!)length 最终是使用对列表结构的递归来实现的。既然如此,使用显式递归来实现这些基本功能可能是一个值得学习的练习。

  • 请记住,在后台,最后一个元素的检索不是直接的。由于我们正在处理链表,length 必须遍历列表的所有元素,而 (!!) 必须遍历所有元素直到所需的索引。既然如此,lst !! (length lst - 1) 遍历整个列表两次,而不是一次。 (根据经验,这就是为什么最好避免使用 length 的原因之一,除非您实际上需要知道元素本身的数量,而不仅仅是作为其他东西的代理.)

  • 模式匹配是陈述数据类型结构事实的一种简洁方式。如果在递归地使用一个列表时,你匹配了一个 [x] 模式(或者,等效地,x : [] - 一个元素 consed 到空列表),你知道 x 是最后一个元素。在某种程度上,匹配 [x] 所涉及的间接级别比访问索引 length lst - 1 处的列表元素少一级,因为它只处理列表的结构,而不需要将索引方案用 bolt 固定在其顶部。

话虽如此,您认为显式递归感觉“几乎是蛮力”的感觉从根本上是正确的。随着时间的推移,您会发​​现折叠、映射函数和其他捕获和抽象常见递归模式的方法,从而使以更流畅的方式编写成为可能。

关于Haskell 风格 : Pattern matching vs. 更直观的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684964/

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