《Two Dozen Short Lessons in Haskell》(二十四)代数类型
这是《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》(二十四)代数类型的更多相关文章
- 《Two Dozen Short Lessons in Haskell》(二十二)递归
<Two Dozen Short Lessons in Haskell>(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学 ...
- 《Two Dozen Short Lessons in Haskell》所有习题的索引
<Two Dozen Short Lessons in Haskell>(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学 ...
- Bootstrap<基础二十四> 缩略图
Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...
- 二十四、Struts2中的UI标签
二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...
- WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...
- VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机
VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...
- Bootstrap入门(二十四)data属性
Bootstrap入门(二十四)data属性 你可以仅仅通过 data 属性 API 就能使用所有的 Bootstrap 插件,无需写一行 JavaScript 代码.这是 Bootstrap 中的一 ...
- 3360: [Usaco2004 Jan]算二十四
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6 Solved: 6[Submit][Statu ...
- JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...
随机推荐
- 对html第一次尝试
1.对于写文档 修改后缀为html,双击进入为网页模式. 2.编写网页 1)新建 2)基本格式 <!DOCTYPE html><!-- ...
- VMware下三种网络连接模式介绍
birdged(桥接) 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于 ...
- Unity日记—对象缓存池
最近都在忙别的事了,今天忙里偷闲了解了一下对象池是啥玩意,简单记录一下. 还是个正在学习的萌新,如果写的不好请见谅. 1.对象池是啥 在了解对象池之后,我才意识到以前写的代码有多么蠢,当场景中有一些重 ...
- Unity 音频合并
将多个音频组合起来进行播放 代码如下: ; [SerializeField] AudioClip s1; [SerializeField] AudioClip s2; [SerializeField] ...
- Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句
Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...
- (Alpha)Let's-NABC
效果图 NABC Need 在日常生活中我们也许经常有这样的疑问:在空闲时间内经常感到无处可去:抑或是有个心血来潮的想法却无人响应:或者困扰于自己狭小的交际圈,希望能有更多的朋友.(打个羽毛球没人一起 ...
- We are a 团队
虽然在团队中只是拖后腿的存在,但是几个人一起摸索着前进也确实有着不一样的感觉. 我们队伍共有五个人:董强强.张振鑫.王鼎.高庆阳还有我(排名不分先后) 我们有自己的关于软件工程的QQ群,会在群里讨论一 ...
- DataGridView不显示未绑定的列-AutoGenerateColumns
DataGridView绑定数据源时,会自动显示未绑定的列,怎么让其不显示未绑定的列呢? 设置AutoGenerateColumns属性即可 this.dataGridView1.AutoGenera ...
- C#ToString() 格式化数值
格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数. 格式说明符 说明 示例 输出 C 货币 2.5.ToString(&q ...
- Luogu4768 NOI2018归程(最短路径+kruskal重构树)
按海拔从大到小合并建出kruskal重构树,这样就能知道开车能到达哪些点,对这些点到1的最短路取min即可.最难的部分在于多组数据的初始化和数组大小的设置. #include<iostream& ...