《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:>则是系统命令行的提示符。

相关文章
|
7月前
|
存储 算法 编译器
C++ 函数式编程教程
C++ 函数式编程学习
|
SQL Rust 前端开发
Rust学习笔记之面向对象编程
Rust学习笔记之面向对象编程
|
JavaScript 前端开发 程序员
热爱函数式的你,句句纯正的 Haskell【类型篇】
Haskell 是一门纯的函数式语言。 也就是说计算机主要是通过函数来完成的(像在数学中一样),而不是通过“先做这个,再做那个”的命令式操作顺序进行的(像在主流的编程语言中一样)。—— Simon Peyton Jones
热爱函数式的你,句句纯正的 Haskell【类型篇】
|
JavaScript 编译器
热爱函数式的你,句句纯正的 Haskell【表达式篇】
表达式是编程语言中最常用到的基础之一,本片让我们来看看在 Haskell 中表达式是怎样的?
热爱函数式的你,句句纯正的 Haskell【表达式篇】
|
编译器
热爱函数式的你,句句纯正的 Haskell【函数篇】
Haskell 值与函数是统一的,函数只是需要其他参数输入的值。如果定义的是函数,那么这个函数的行为在运行过程中也是不会改变的,对于某一个特定的输入返回的结果总是确定的,这样的函数为纯函数。
|
Java Kotlin 索引
【Kotlin 初学者】函数式编程
一、函数式编程概念 1.1 面向函数编程(FOP) 在函数式编程(FP)中,一切皆是函数。FP是关于不变性和函数组合的一种编程范式。 函数式语言提倡在有限的几种关键数据结构(如list、set、map)上,运用函数的组合(高阶函数)操作,自底向上地来构建世界。Kotlin支持多种编程范式,所以你可以混用面向对象编程和函数式编程范式来解决手头的问题。
158 0
【Kotlin 初学者】函数式编程
|
Shell BI 测试技术
Haskell 编程入门
在过去的几个月里,学习Haskell让我觉得非常快乐,但是入门的过程并没有我原先想象的那么简单。我非常幸运地在一个正确的地方工作,并且因此能够在Facebook参加Bryan O'Sullivan的Haskell课程。在Try Haskell上玩了一段时间后,最终你就会想要在自己的电脑上安装GHC了。
215 0
Haskell 编程入门
haskell简明入门(一)
本文的主要内容参考自《Haskell趣学指南》 1. What is Haskell?     以下内容引用自Haskell官网: Haskell是一个先进的,纯粹的函数式编程语言。一个典型的声明式地,静态类型的代码如下: primes = filterPrime [2.
1514 0
|
前端开发 JavaScript 容器
Kotlin闭包(支持函数式编程不再是梦想)
一、闭包 闭包目前非常火,因为闭包的出现,现在支持函数式编程就不再是梦想了。 二、什么是闭包 1.函数的运行环境 2.
2084 0