这是《Two Dozen Short Lessons in Haskell》这本书的最后一章,第23章没有习题。

这一章里介绍了Haskell如果自定义一种类型,并且用一个双人博弈游戏为例子讲解了如何使用这些类型,里面简单介绍了Minimax算法。

至此,这本书全部学完,当然还没用Haskell写过什么大一点的程序,只是掌握了其基本概念。

1 A tree, in computer science, is an entity

a with a root and two subtrees

b with a root and a collection of subtrees, each of which is also a tree

c with a collection of subtrees, each of which has one or more roots

d described in a diagram with circles, lines, and random connections

2 A sequence, in Haskell, is an entity

a with one or more elements

b that is empty or has a first element followed by a sequence of elements

c whose elements are also sequences

d with a head and one or more tails

3 The following definition specifies

HASKELL DEFINITION • data WeekDay =

HASKELL DEFINITION • Monday | Tuesday | Wednesday | Thursday | Friday

a a type with five constructors

b a type with five explicit constructors and two implicit ones

c a tree with five roots

d a sequence with five elements

4 Given the definition in the preceding question, what is the type of the following function f?

HASKELL DEFINITION • f Tuesday = "Belgium"

a f :: WeekDay –> String

b f :: Tuesday -> "Belgium"

c f :: Day –> Country

d type of f cannot be determined

5 Types defined in Haskell scripts with the data keyword

a must begin with a capital letter

b may be imported from modules

c must be used consistently in formulas, just like intrinsic types

d all of the above

6 What kind of structure does the following type represent?

HASKELL DEFINITION • data BinaryTree = Branch BinaryTree BinaryTree | Leaf String

a a type with four constructors

b a digital structure

c a tree made up of ones and zeros

d a tree in which each root has either two subtrees or none

7 Given the preceding definition of the type BinaryTree, which of the following defines a function that computes

the total number of Branch constructors in an entity of type BinaryTree?

a branches binaryTree = 2

b branches (Branch left right) = 2

branches (Leaf x) = 0

c branches (Branch left right) = 1 + branches left + branches right

branches (Leaf x) = 0

d branches (Branch left right) = 2*branches left + 2*branches right

branches (Leaf x) = 1

8 The formula xs!!(length xs - 1)

a is recursive

b has the same type as xs

c delivers the same result as last xs

d none of the above

9 Given the definition of the function pam in the module SequenceUtilities, the formula

pam (map (+) [1 . . 5]) 10

a delivers the same result as map (1+) [1 . . 5]

b delivers the same result as pam [1 .. 5] (map (1+))

c delivers the result [11, 12, 13, 14, 15]

d all of the above

10 Given the Grid [1,3,0, 0,0,0, 0,0,2] (as in the tic-tac-toe script), what is the status of the game?

a game over, X wins

b game over, O wins

c O’s turn to play

d X’s turn to play

11 Which of the following formulas extracts the diagonal of a grid (as in the tic-tac-toe program)?

a (take 3 . map head . iterate(drop 4)) grid

b [head grid, head(drop 4 grid), head(drop 8 grid)]

c [head grid, grid!!4, last(grid)]

d all of the above

======

答案

======

1 b

数据结构中“树”的定义,一个根及多个子树

2 b

列表有可能是空的

3 a

data可以来自定义一种类型(也就是面向对象语言中的类),这里有五个构造器constructor。只是这里的构造器都没有带参数。

4 a

这个简单,定义好的类型可以像内置的Haskell类型一样来用。

5 d

类型名称必须是大写字母开头的;可以导入模块中;可以像内置的类型一样用。

6 d

就是二叉树的定义

7 c

求二叉树的分支总数。叶子节点分支为0,否则为左子树的分支数+右子树的分支数。

8 c

!!用来取出一个列表中指定位置上的元素。这里就是取最后一个元素,与last函数一样。

9 c?

还没搞明白pam的意思。

10 c

先走画X,后走的画O。该O方走棋。

130   XX.

000   …

002   ..O

11 b?

答案是b,我认为是d。感觉这些表示方法都正确,答案a中的函数写得相当牛X,不知道为什么不正确?

《Two Dozen Short Lessons in Haskell》(二十四)代数类型的更多相关文章

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

    <Two Dozen Short Lessons in Haskell>(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学 ...

  2. 《Two Dozen Short Lessons in Haskell》所有习题的索引

    <Two Dozen Short Lessons in Haskell>(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学 ...

  3. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

  4. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  5. WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?

    原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...

  6. VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机

    VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...

  7. Bootstrap入门(二十四)data属性

    Bootstrap入门(二十四)data属性 你可以仅仅通过 data 属性 API 就能使用所有的 Bootstrap 插件,无需写一行 JavaScript 代码.这是 Bootstrap 中的一 ...

  8. 3360: [Usaco2004 Jan]算二十四

    3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6  Solved: 6[Submit][Statu ...

  9. JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

    JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...

随机推荐

  1. Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件

    """ 获取浏览器 打开本地浏览器 打开远程浏览器 关闭浏览器 打开网址 最大化 最小化 标题 url 刷新 Python对Selenium封装浏览器调用 ------b ...

  2. OpenCV操作像素

    在了解了图像的基础知识和OpenCV的基础知识和操作以后,接下来我们要做的就对像素进行操作,我们知道了图像的本质就是一个矩阵,那么一个矩阵中存储了那么多的像素,我们如何来操作呢?下面通过几个例子来看看 ...

  3. 《杜增强讲Unity之Tanks坦克大战》10-相机控制

    10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内.   image 在Hierarchy点击右键   image 点击 Create Empty,生成空对象,改名 ...

  4. 小程序swiper组件高度自适应【转载】

    最近在做小程序开发,复制官方文档上的swiper组件实测后发现,图片不能自适应.网上找了几个版本测试都发现存在一些小问题,目前这个版本本人实测是最好用的.记录一下,方便日后使用. 感谢原创大神的帮助, ...

  5. python 游戏(龙的国度)

    1. 理清楚游戏思路 实现功能:2个洞穴选择,一个洞穴是好龙,一个洞穴是坏龙,坏龙可以概率屠龙或者概率逃跑选项(后续难度需要增加宝藏获取装备,随机遇见商人,随着游戏进度逐步减少屠龙概率) 2. 计数和 ...

  6. jmeter学习(1)基础支持+安装部署

    1. Apache jmeter 是100%的java桌面应用程序 支持的协议有:WEB-HTTP/HTTPS   , SOAP,   FTP,  JDBC,  LDAP, MAIL, MongoDB ...

  7. hexo搭建

    http://blog.csdn.net/gdutxiaoxu/article/details/53576018

  8. [BUG随想录] expat不兼容BUG

    本周五软工团队项目的第一次前后端全部对接时,出了一个蛋疼的错误. 最初起因是小丽叔出于安全的考虑,使用守护进程来跑Web服务器.守护进程(Daemon)是运行在后台的一种特殊进程,如果服务器用root ...

  9. JDBC的编码步骤

    0.前提:拷贝数据库的驱动到构建路径中(classpath) 1.注册驱动 2.获取与数据库的链接 3.创建代表SQL语句的对象 4.执行SQL语句 5.如果是查询语句,需要遍历结果集 6.释放占用的 ...

  10. 第十二周(12.01-12.04)----final评论I

    1.  约跑App——nice!:作为final发布讲说的第一组,nice团队很不容易.虽然很早就来到了发布场地,为发布做准备.但是准备上还是有些不足.对于摄像头的不稳定,nice没有很好的解决.在演 ...