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

    xiaoxiao2024-04-10  114

    本节书摘来自异步社区《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]

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

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

    it + 100

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

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

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)