《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还是先看其它一些入门书籍吧,这本书配套着学学还是不错的。

第18章 Interactive Keyboard Input and Screen Output

IO类型在初学Haskell的时候是一个很难理解的概念,平常的编程语言中已经习惯了输入、输出语句,但在函数式编程中一切皆函数,一个确定的函数会得到确定的计算结果,而与操作系统交互时函数式编程就不太方便了,这时Haskell引出了一个IO类型。

一个重要的do表达式:

这一章还介绍了一个字符串连接的函数,可以把字符串末尾加上换行符,再连接起来

unlines :: [String] -> String

unlines = concat . map (++ "\n")

例如:

unlines ["line1", "line2", "line3"] = "line1\nline2\nline3\n"

 

1 Values of IO type

a are in the equality class Eq

b specify requests for operating system services

c represent tuples in a unique way

d describe Jovian satellites 

 

2 Which of the following intrinsic functions in Haskell causes output to appear on the screen?

a concat :: [[any]] -> [any]

b putStr :: String -> IO ()

c printString :: Message –> Screen

d getLine :: IO String 

 

3 What will be the effect of the command main, given the following script?

HASKELL DEFINITION •main =

HASKELL DEFINITION •   do putStr "Good "

HASKELL DEFINITION •        putStr "Vibrations\n"

HASKELL DEFINITION •        putStr " by the Beach Boys\n"

a one line displayed on screen

b two lines displayed on screen

c three lines displayed on screen

d audio effects through the speaker 

 

4 What will be the effect of the command main, given the following script?

HASKELL DEFINITION • main =

HASKELL DEFINITION •   do putStr "Please enter your first and last name (e.g., John Doe): "

HASKELL DEFINITION •        firstLast <- getLine

HASKELL DEFINITION •        putStr (reverse firstLast)

a display of name entered, but with the last name first

b display of last name only, first name ignored

c display of last name only, spelled backwards

d display of name spelled backwards (书中在这里有印刷错误) 

 

5 How should the last input/output directive in the preceding question be changed to display the first name only?

什么时候只输出名字?

a putStr(take 1 firstLast)

b putStr(drop 1 firstLast)

c putStr(takeWhile (/= ’ ’) firstLast)

d putStr(dropWhile (/= ’ ’) firstLast) 

 

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

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

1 b 

 

2 b

putStr函数返回的类型是IO (),表示要与操作系统有交互动作,这个()表示不返回任何数据。

 

3 b

结果应该是:

Good Vibrations

 by the Beach Boys

 

4 d

如果输入是John Doe

则屏幕输出:eoD nhoJ

 

5 c

如果输入是John Doe

选项a:take 1 firstLast,会取出第一个字符,“J" 

选项b:drop 1 firstLast,会除掉第一个字符, "ohn Doe"

选项c:takeWhile (/=' ') firstLast,会得到空格前的字符串,"John",是正确答案。

选项d:dropWhile (/=' ') firstLast,会除掉第一个空格前的所有字符," Doe",注意Doe前面还有一个空格 

转载于:https://www.cnblogs.com/speeding/archive/2013/03/23/2976288.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

figma设计_Figma中简单,可重复使用的设计系统

figma设计Putting together a design system may seem like an unnecessary hassle. It’s often easier to jump straight into designing things without having to worry about styles, components, or libraries. Some might even argue that when it comes to smaller pro…

Teach Yourself Java 2 in 21 Days 书中样例代码实践

找了好几书JAVA的书&#xff0c;看了几章&#xff0c;都看不下去。 我觉得适合《Teach Yourself Java 2 in 21 Days》&#xff08;Rogers Cadenhead Laura Lemay&#xff09;还是适合我的。 孙卫琴那本&#xff0c;我感觉就罗嗦多了没到我点子上。 接口&#xff0c;抽象类这些内…

黑书上的DP例题

pagesectionnotitlesubmit1131.5.1例题1括号序列POJ11411161.5.1例题2棋盘分割POJ11911171.5.1例题3决斗Sicily18221171.5.1例题4“舞蹈家”怀特先生ACM-ICPC Live Archive1191.5.1例题5积木游戏http://202.120.80.191/problem.php?problemid12441231.5.2例题1方块消除http://…

MDK linker和debug的设置以及在RAM中调试

有误或者表述不清楚请指出&#xff0c;谢谢 硬件&#xff1a;TQ2440开发板、jlink V8 固件 软件&#xff1a;J-LINK ARM 4.08i、MDK4.20 先解释下MDK中三种linker之间的区别 设置集中在option linker选项卡 1.采用Target对话框中的ram和rom地址。采用此方式&#xff0c;…

LBS核心技术解析(引子)

http://www.cnblogs.com/LBSer/archive/2013/04/25/3048754.html 引子&#xff1a; 人们常用“上知天文&#xff0c;下知地理”来形容一个人的博学&#xff0c;人们总是用三要素论“什么时间、什么地点&#xff0c;发生或干了什么事情”来描述一件事情,人们也常常借用“天时、地…

Vim中数字自增、自减

&#xff08;1&#xff09;ctrl a&#xff1a;数字自动增加1 按下ctrl a&#xff1a; &#xff08;2&#xff09;number ctrl a&#xff1a;数字自动增加number 例子&#xff1a;想将20修改成100&#xff0c;按下80 ctrl a&#xff1a; &#xff08;3&#xff09;ctrl x…

开源服务器Tornado的初步了解

文章结束给大家来个程序员笑话&#xff1a;[M] 明天看了下Python的一个新web框架&#xff0c;由Facebook开源。不得不说&#xff0c;品牌效应啊&#xff0c;只要是Facebook开源的目项&#xff0c;没有不好用的。Tornado可以说是好用到了极致&#xff0c;从开打官方面页开始懂得…

多线程的那群“象”

最初学习多线程的时候&#xff0c;只学了用Thread这个类&#xff0c;记忆中也用过Mutex&#xff0c;到后来只记得Thread的使用&#xff0c;其余的都忘了。知道前不久写那个Socket连接池时遇到了一些对象如&#xff1a;Semaphore&#xff0c;Interlocked&#xff0c;Mutex等&…

优秀HTML5网站学习范例:从“饥饿游戏浏览器”谈用户体验

继影片《饥饿游戏》获得票房成功后&#xff0c;《饥饿游戏2&#xff1a;火星燎原》也于2012年宣布开拍&#xff0c;将在今年的11月22日登陆全球各大院线。值此之际&#xff0c;微软携手美国狮门影业公司和 RED Interactive Agency 一起为影迷打造了一个基于 HTML5 现代网页规范…

[开源]jquery.ellipsis根据宽度(不是字数)进行内容截断,支持多行内容

jquery.ellipsis 自动计算内容宽度&#xff08;不是字数&#xff09;截断&#xff0c;并加上省略号&#xff0c;内容不受中英文或符号限制。 如果根据字数来计算的话&#xff0c;因为不同字符的宽度并不相同&#xff0c;比如l和W&#xff0c;特别是中英文&#xff0c;最终内容宽…

不安装游戏apk直接启动法

原文地址&#xff1a;http://blog.zhourunsheng.com/2011/09/%E6%8E%A2%E7%A7%98%E8%85%BE%E8%AE%AFandroid%E6%89%8B%E6%9C%BA%E6%B8%B8%E6%88%8F%E5%B9%B3%E5%8F%B0%E4%B9%8B%E4%B8%8D%E5%AE%89%E8%A3%85%E6%B8%B8%E6%88%8Fapk%E7%9B%B4%E6%8E%A5%E5%90%AF%E5%8A%A8%E6%B3%95…

Android客户端打包方案分享

基本介绍 Android应用的自动化打包是应用持续集成以及多渠道发布的基础。当前Android客户端自动化打包的主要有两种方式&#xff0c;Ant和Maven。两种方式本质上都是调用Android SDK里面提供的工具&#xff0c;不过各自有各自的特点。 1. Ant脚本 好处&#xff1a;开发成本较低…

您的UX库不只是书籍

hp ux 密码不过期Looking back on past self, one thing I wish I’d realised is the importance of keeping notes of everything.回顾过去的自我&#xff0c;我希望我意识到的一件事是记录所有事情的重要性。 This means everything interesting I’ve read and written; e…

交互设计精髓_设计空间的精髓

交互设计精髓重点 (Top highlight)什么是空间&#xff1f; (What is Space?) Space is the dimension of height, depth and width within which all things exist and move. Space or Empty space or White space or Negative space are alias given to describe intensional…

ux和ui_UI和UX设计人员的47个关键课程

ux和ui重点 (Top highlight)This is a mega-list of the most critical knowledge for UI, UX, interaction, or product designers at any level.这是所有级别的UI&#xff0c;UX&#xff0c;交互或产品设计人员最关键的知识的大清单。 Many of these lessons are also appli…

深入理解Java内存模型(七)——总结

处理器内存模型 顺序一致性内存模型是一个理论参考模型&#xff0c;JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松&#xff0c;因为如果完全按照顺序一致性模型来实现处理器和JMM&#xff0c;那么…

沉浸式ui设计_有助于沉浸的视频游戏UI —武器轮

沉浸式ui设计Many action-adventure games rely on the feeling of thrills via bullets, fire, grenade, more bullets, and gigantic booms. The way to enable all these is to offer a massive arsenal, from machetes to assault rifles all the way till bazookas.许多动…

ux设计师薪水_客户现在也是UX设计师

ux设计师薪水Some of you probably know by now, I’m not too fond of the monster the UX industry has become. It’s overblown, overcomplicated and often dishonest towards the clients. It’s also in itself undefined. (where is the E in Experience?)你们中的某些…

分步表单_角色创建分步指南

分步表单The first thing most of us designers are taught is the concept of personas and the necessity of them when it comes to UX and product design. However, knowing is different from applying and it can be difficult to know where to begin when we’re aske…

svg配合css3动画_带有Adobe Illustrator,HTML和CSS的任何网站的SVG动画

svg配合css3动画A top trend in web design for 2020 is the increased use of SVG animations on web pages and in logo design. In this article, we will implement a simple and straight forward method to create relatively complex animation. We will use Adobe Illu…