《Two Dozen Short Lessons in Haskell》(二十二)递归

简介:

《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习 Haskell的一套练习册,共有2本,一本是问题,一本是答案,分为24个章节。在这个站点有PDF文件。几年前刚开始学习Haskell的时候,感觉前几章还可以看下去,后面的内容越来越难以理解。现在对函数式编程有了一些了解后,再来看这些题,许多内容变得简单起来了。

初学Haskell之前一定要记住:

把你以前学习面向过程的常规的编程语言,如Pascal、C、Fortran等等统统忘在脑后,函数式编程完全是不一样的编程模型,用以前的术语和思维来理解函数式编程里的概念,只会让你困惑和迷茫,会严重地影响你的学习进度。

这个学习材料内容太多,想把整书全面翻译下来非常困难,只有通过练习题将一些知识点串起来,详细学习Haskell还是先看其它一些入门书籍吧,这本书配套着学学还是不错的。

第二十二章 Recursion

递归是函数式编程中的主要编程思想,从而使得代码非常简练。

 

1 Which of the following defines a function that delivers the same results as the intrinsic function reverse?

a rev(x : xs) = xs ++ [x]

   rev [ ] = [ ]

b rev(xs : x) = x : xs

   rev [ ] = [ ]

c rev(x : xs) = rev xs ++ [x]

   rev [ ] = [ ]

d none of the above

 

2 Which of the following defines a function that would rearrange a sequence of numbers to put it in decreasing 
numeric order?

a sortDecreasing = quickSortWith (>)

b sortDecreasing = quickSortWith (>) [18.01528974, 1.89533e+25, 1.05522e-24, 27.0]

c sortDecreasing = quickSortWith (>) numbers

d all of the above

 

3 The following function

HASKELL DEFINITION • sorta(x : xs) = insert x (sorta xs)

HASKELL DEFINITION • sorta [ ] = [ ]

HASKELL DEFINITION • insert a (x : xs)

HASKELL DEFINITION •     | a <= x = [a, x] ++ xs

HASKELL DEFINITION •     | otherwise = [x] ++ (insert a xs)

HASKELL DEFINITION • insert a [ ] = [a]

a delivers the same results as quicksort

b delivers the same results as quicksortWith (<)

c both of the above

d neither of the above

 

 

=============================

=============================

 

1 c

这道题很简单,如果函数定义里连rev都没有,根本就不是递归

 

2 a

选项b直接返回了一个确定性的列表,应该是[1.89533e+25,  27.0, 18.01528974, 1.05522e-24]

选项c多了个numbers,这个函数就返回了一个列表,而不是返回一个函数

 

3 c

sorta就是插入排序

quicksort默认是从小到大排序

本文转自申龙斌的程序人生博客园博文,原文链接:http://www.cnblogs.com/speeding/p/3143320.html,如需转载请自行联系原作者

http://www.cnblogs.com/speeding/ 

相关文章
|
5月前
|
存储 人工智能 安全
【阿里云基础设施 AI Tech Day】 AI Infra 建设方案及最佳实践沙龙圆
聚焦 AI Infra 建设方案及最佳实践,「智驱未来,云网随行:AI Infra 建设方案及最佳实践」沙龙阿里云基础设施 AI Tech Day 北京站于 8 月 8 日下午在北京全球创新社区顺利举办,活动现场吸引了来自月之暗面、字节、小米、爱奇艺、360、雪球、猿辅导、奥迪等 16 家相关 AI 领域领先企业或有AI建设诉求企业的 32 名业务/技术骨干参与。本次技术沙龙旨在聚焦企业建设高效、高可用的 AI Infra,深入解析 AI 驱动的原子能力与场景化架构设计,分享从基础网络建设、算力池化、存储调度,以及 VPC RDMA 性能优化、Agent 智能体出海等场景的全链路方案,助力企业
425 1
|
机器学习/深度学习 自动驾驶 语音技术
深度学习的魔法:从理论到实践
本文将深入浅出地介绍深度学习,一种强大的机器学习技术。我们将从基本概念出发,探讨其工作原理和应用场景,最后通过一个实际案例来展示深度学习如何改变我们的生活。无论你是初学者还是有一定基础的学习者,都能在这篇文章中找到有价值的信息。让我们一起探索深度学习的奥秘吧!
|
文字识别 API
印刷文字识别操作报错合集之如何解决报错:The image type does not match the API operation.
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
存储 设计模式 缓存
探索微服务架构下的缓存策略
【7月更文挑战第18天】在微服务架构的海洋中,缓存策略如同指南针,指引着系统性能的优化方向。本文将深入探讨微服务环境下缓存的有效应用,从缓存的基本概念出发,到微服务架构中缓存的特殊需求,再到实际案例分析,最后讨论缓存一致性与失效策略,旨在为开发者提供一套完整的缓存解决方案框架。
|
小程序
跨端技术问题之页面或组件样式在小程序、小程序插件和小程序分包中有什么差异
跨端技术问题之页面或组件样式在小程序、小程序插件和小程序分包中有什么差异
|
机器学习/深度学习 人工智能 算法
阿里达摩院 MindOpt 介绍和使用
MindOpt 是阿里巴巴达摩院决策智能实验室研发的决策优化软件。团队组建于2019年,聚焦于研发尖端运筹优化和机器学习技术,构建智能决策系统,更快更好地向各行各业提供数学建模与求解能力,帮助业务更快更好地做出决策,以期降低成本、提升效率、增大收益 。当前 MindOpt 围绕智能决策优化所需的建模和求解能力,突破国外垄断,自研了 MindOpt Solver 优化求解器、MindOpt APL 建模语言、MindOpt Tuner 调参器;并创新地提出“强化+优化”双决策引擎,打造了MindOpt Studio 优化平台。并结合前沿先进的预训练大模型技术打造MindOpt Copilot。
4345 2
阿里达摩院 MindOpt 介绍和使用
|
Java Maven
Maven 中的内置变量说明
Maven 中的内置变量说明
184 1
|
前端开发 Java 应用服务中间件
Java项目-基于SSM实现教学协同管理系统
Java项目-基于SSM实现教学协同管理系统
250Echarts - 3D 曲面(Sphere Parametric Surface)
250Echarts - 3D 曲面(Sphere Parametric Surface)
129 0
|
编解码 资源调度 自然语言处理
【计算机视觉】Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP(OVSeg)
基于掩码的开放词汇语义分割。 从效果上来看,OVSeg 可以与 Segment Anything 结合,完成细粒度的开放语言分割。
1289 0