本节书摘来自异步社区《Haskell函数式编程入门》一书中的第1章,第1.3节GHCi的使用,作者 张淞,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 GHCi的使用
GHCi是一个对函数进行测试与调式的工具,可以导入Haskell源代码文件,然后调用其中的函数、查看函数的信息等。本节先学习如何使用GHCi中的命令来对文件和库进行导入等,再来了解如何在GHCi中调用函数。

启动GHCi后可以看到GHCi的版本,还有导入的库等,可以不用管它们,最后一行会有一个Prelude>提示符,其中Prelude指的是GHCi在运行时一个默认的初始环境。它是一个定义了很多类型与函数的库。启动GHCi后,用户可以不做任何设置而直接使用其中定义的内容。下面来看一下GHCi中的一些命令。

1.3.1 GHCi中的命令
下面介绍一些常用的GHCi命令,学习如何导入代码文件和库模块,以及如何改变GHCi的当前路径等。
:load:简写为:l,用来导入当前路径或者指定路径下的文件,但在Windows下要注意使用转义的反斜杠。比如,导入作者桌面上HelloWrold文件夹下的HelloWorld.hs,WinGHCi的用户可以直接使用打开按钮来打开程序文件。

 Prelude>:l  "C:\\Users\\User\\Desktop\\HelloWorld\\HelloWorld.hs"

:reload:简写为:r,用来重新导入当前的源代码文件。通常,在保存了源文件后,GHCi不会自动重新导入修改后的文件,用户可以很方便地使用:r来重新导入。WinGHCi的用户可以使用刷新按钮来重新导入程序文件。
:cd:改变当前GHCi的路径。这样做就不用每一次都输入绝对路径来导入文件了。例如:
Prelude>:cd C:\Users\User\Desktop
:edit:用默认的文本编辑器编辑当前导入的文件。如果使用GHCi,它会读取系统环境变量中的EDITOR,启动相应的编辑器。如果读者使用的是Hugs,则需要设置HUGSFLAG环境变量来使得Hugs可以启动对应的文本编辑器。更多信息可以参阅Hugs用户手册3.1节,可以浏览http://cvs.haskell.org/Hugs/pages/users-guide/。
:module:导入一个库,简写为:m。使用:m +与:m – 来增加与移除不同的模块。在后面会具体介绍如何使用这个命令。
:quit:退出GHCi。
:?:可以让GHCi输出帮助信息。
当然,GHCi的命令还有很多,本书将在后面的章节再做介绍。这里约定:若没有特别说明,则GHCi指的就是WinGHCi,而不是命令行的下的GHCi。

1.3.2 在GHCi中调用函数
很多数值比如整数、小数还有一些四则运算的函数都已经在上节中提过的Prelude初始环境中定义好了,所以可以直接使用。由于在Prelude中定义了各种数学运算符号,因此GHCi可以当做一个计算器来使用。比如:

>4+6*7/3
18.0
此外还有自然对数函数、三角函数及圆周率π等。> log 2.71828
0.999999327347282> sin (pi/3) / cos (pi/3)
1.7320508075688767> tan (pi/3)
1.7320508075688767除数字的类型以外,Prelude中还定义了布尔类型,这种类型只有True与False两个值,表示真与假。Prelude中也定义了基于布尔值的运算符,读者可以直接用&&运算符号对布尔值做逻辑与运算。例如:> True && False
False

除了逻辑与运算&&外,Prelude中还提供了逻辑或运算符||,用户可以在GHCi中测试这个函数。

Prelude中还提供非常实用的容器—列表。有了它就可以很灵活地对值进行存储和使用相关的函数。[1..4]表示遍历整数1~4,即[1,2,3,4]。

[1..4]
[1,2,3,4]

sum是一个可以对列表中的数值进行求和的函数。也就是说,给定一个列表sum,会求得该列表中所有元素的和。比如:

sum [1..4]

10
Prelude中的product函数可以求得一个列表的所有元素的乘积,读者可以在GHCi中计算[1..4]的乘积。

如果想引用之前调用的函数所计算的结果,可以使用it。比如,计算了1~4之间的整数之和后想再加100可以写为:

it + 100

110
因为it在GHCi中可以指代前一次函数计算的结果,所以在定义函数还有测试时不要使用it作为函数或者变量的名称。

最后,约定如下:如果书中只用>符号,然后调用函数或者输入GHCi命令,则表示在GHCi的提示符中的操作,而C:>则是系统命令行的提示符。

《Haskell函数式编程入门》—— 第1章,第1.3节GHCi的使用相关推荐

  1. 《Haskell函数式编程入门》—— 第1章,第1.5节第一个Haskell程序HelloWorld!

    本节书摘来自异步社区<Haskell函数式编程入门>一书中的第1章,第1.5节第一个Haskell程序HelloWorld!,作者 张淞,更多章节内容可以访问云栖社区"异步社区& ...

  2. 《Haskell函数式编程入门》——导读

    本节书摘来自异步社区<Haskell函数式编程入门>一书中的导读,作者 张淞,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章Haskell简介 第1章第1节 ...

  3. 专访《Haskell函数式编程入门》作者张淞:浅谈Haskell的优点与启发

    张淞,Haskell语言爱好者,著有<Haskell函数式编程入门>一书.目前就职于网易杭州研究院.在10月15日~17日的QCon上海2015上,他将分享<Haskell中的函数与 ...

  4. core组件进阶(Opencv3编程入门 第五章) 第四节 图像对比度亮度调整

    core组件进阶(Opencv3编程入门 第五章) 第四节 图像对比度亮度调整 #include <opencv2/core/core.hpp> #include <opencv2/ ...

  5. 【读书笔记】Haskell函数式编程入门 I 基础篇 2. 类型系统和函数

    文章目录 2. 类型系统和函数 2.1 Haskell的数据和类型 2.1.1 Haskell常用数据类型 2.1.2 函数类型 (1) 函数类型的定义 (2) 非柯里化函数和柯里化函数 (3) 多态 ...

  6. Java 函数式编程入门

    Java 函数式编程入门 函数式编程实战 改进 完整代码   像 JavaScript 这种语言很早就支持闭包了,虽然 C++ 很早就有了函数指针,Java 也很早就提供了反射中的 Method 类, ...

  7. JavaScript函数式编程入门经典

    一个持续更新的github笔记,链接地址:Front-End-Basics,可以watch,也可以star. 此篇文章的地址:JavaScript函数式编程入门经典 正文开始 什么是函数式编程?为何它 ...

  8. 编程范式 —— 函数式编程入门

    该系列会有 3 篇文章,分别介绍什么是函数式编程.剖析函数式编程库.以及函数式编程在 React 中的应用,欢迎关注我的 blog 命令式编程和声明式编程 拿泡茶这个事例进行区分命令式编程和声明式编程 ...

  9. JavaScript 函数式编程——入门指南

    JavaScript 函数式编程 一.什么是函数式编程 **定义:**函数式编程是一种编程范式,将整个程序都由函数调用以及函数组合构成. 可以看成一条流水线,数据可以不断地从一个函数的输出流入另一个函 ...

最新文章

  1. 吴恩达:企业如何实现人工智能转型?
  2. 开课吧python好吗-如何选择python培训机构?开课吧python培训怎么样?
  3. Spark性能优化:对RDD持久化或CheckPoint操作
  4. 【ABAP】更新交货单交货数量和拣配数量
  5. Atitit ftp原理与解决方案
  6. 终于把joomla 的 protostar 模版的菜单,从垂直改到水平了
  7. Hive分区和桶的概念
  8. [转] TOUGH 的系列平面广告
  9. she is so css什么意思,输入she is so什么意思 微信she is so什么梗
  10. 谷歌放弃C++语言,Python将要一统江湖了?
  11. redis 模糊查找keys
  12. Linux——vim编辑器详解
  13. 100台服务器分发文件,通过简单shell脚本+rsync实现单一文件分发到多台服务器
  14. Python 上传文件到阿里云OSS
  15. 第15课:JSP动作 Jsp forward动作(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  16. 多多客id是什么意思_【拼多多】关于多多客比价行为规范解释说明
  17. 安装到到setup support files时,SQL2008安装程序自动消失掉。
  18. 蚁群算法原理及matlab代码实现
  19. MySQL-5.5-winx64 安装包下载
  20. 计算机系统漏洞及防范,计算机系统漏洞以及防范的措施.doc

热门文章

  1. echarts 散点地图
  2. 基于jsp/ssm的互联网就医系统的设计与实现
  3. Qualcomm messaging Interface(QMI)消息定义概述
  4. word中某个图片另存为。快捷便捷的操作方法。
  5. C++设计原则——迪米特法则
  6. Spring Boot Favicon配置
  7. linux下关闭redis服务
  8. 易语言api hook GetAdaptersAddresses 劫持网卡物理地址
  9. 炼金术-Alchemy
  10. ChatGPT通过谷歌L3入职测试,人类码农危矣?