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

简介:

本节书摘来自异步社区《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:>则是系统命令行的提示符。

相关文章
|
Java PHP 开发工具
编程语言Clojure入门
在众多的编程语言中,不少开发人员熟悉Java、C#、PHP等。但是很早以前,也有一些小众的语言,比如Lisp语言,它是一种适用于符号处理和自动推理的编程语言,内部使用表结构来表达非数值计算。而Clojure语言是在JVM上实现的Lisp风格的语言,语法与Lisp类似,且可以和Java语言进行互操作
1147 0
编程语言Clojure入门
|
6月前
|
JavaScript 前端开发 算法
函数式编程
函数式编程
15 0
|
编译器
热爱函数式的你,句句纯正的 Haskell【函数篇】
Haskell 值与函数是统一的,函数只是需要其他参数输入的值。如果定义的是函数,那么这个函数的行为在运行过程中也是不会改变的,对于某一个特定的输入返回的结果总是确定的,这样的函数为纯函数。
|
并行计算 JavaScript 数据可视化
快速了解函数式编程
快速了解函数式编程
103 0
快速了解函数式编程
|
Shell BI 测试技术
Haskell 编程入门
在过去的几个月里,学习Haskell让我觉得非常快乐,但是入门的过程并没有我原先想象的那么简单。我非常幸运地在一个正确的地方工作,并且因此能够在Facebook参加Bryan O'Sullivan的Haskell课程。在Try Haskell上玩了一段时间后,最终你就会想要在自己的电脑上安装GHC了。
175 0
Haskell 编程入门
haskell简明入门(一)
本文的主要内容参考自《Haskell趣学指南》 1. What is Haskell?     以下内容引用自Haskell官网: Haskell是一个先进的,纯粹的函数式编程语言。一个典型的声明式地,静态类型的代码如下: primes = filterPrime [2.
1468 0
|
安全 C语言
《Haskell函数式编程入门》—— 第1章,第1.6节本章小结
本节书摘来自异步社区《Haskell函数式编程入门》一书中的第1章,第1.6节本章小结,作者 张淞,更多章节内容可以访问云栖社区“异步社区”公众号查看
1510 0
|
编译器
《Haskell函数式编程入门》——导读
本节书摘来自异步社区《Haskell函数式编程入门》一书中的导读,作者 张淞,更多章节内容可以访问云栖社区“异步社区”公众号查看
1367 0