首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell样式:模式匹配与更直观的解决方案

Haskell样式:模式匹配与更直观的解决方案
EN

Stack Overflow用户
提问于 2018-10-07 02:24:32
回答 1查看 141关注 0票数 3

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-07 02:59:27

有几件事我能想到:

  • (!!)length最终是使用对列表结构的递归实现的。既然如此,使用显式递归实现这些基本函数可能是一个值得学习的练习。
  • 记住,在引擎盖下,对最后一个元素的检索并不是直接的。由于我们处理的是链接列表,所以length必须遍历列表的所有元素,而(!!)必须遍历所有元素,直至达到所需的索引。既然如此,lst !! (length lst - 1)会在整个列表中运行两次,而不是一次。(这是为什么作为经验规则,最好避免使用length,除非您实际上需要知道元素的数量,而不仅仅是作为其他元素的代理。)
  • 模式匹配是描述数据类型结构事实的一种简洁的方法。如果在递归使用列表时匹配[x]模式(或等效地匹配x : [] --一个与空列表相对应的元素),则您知道x是最后一个元素。在某种程度上,匹配[x]比在索引length lst - 1访问list元素少一个间接级别,因为它只处理列表的结构,而不需要将索引方案栓在其顶部。

尽管如此,从根本上说,你的感觉是正确的,即明显的递归感觉“几乎是野蛮的力量”。随着时间的推移,您将了解折叠、映射函数以及其他捕获和抽象常见递归模式的方法,从而能够以更流畅的方式编写。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52684964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档