TDA 452型
DIT迪特142
2016年HT

2016年功能编程
实验室作业1

本文档包含当然。这是一个小的只是为了让球滚动。查看课程截止日期的主页(很快就到了!)。

我们建议您找一个实验室合作伙伴,在对。(完成后,请使用消防系统提交解决方案。)

请注意,实验作业2及以后必须由两人一组提交。

实验任务1:幂函数

在本实验作业中,您将在两种不同的新方法。幂函数有两个参数n个k个计算n个k个.您的实现只需要在非负面方面发挥作用k个.

您可能在讲座中看到了此函数的一个实现。如果不在此处,则为:

幂::Integer->Integer->Integerpower n k | k<0=错误“power:negative argument”功率n 0=1功率n k=n*功率n(k-1)
你将在这个实验室作业中再实施两种方法。

第1部分

为了计算权力 n个 k个,对于给定的n个k个,有多少计算正在使用“步骤”?

提示:

注:请确保您遵循提交指南当你写代码的时候。

第2部分

计算幂函数的另一种方法是使用标准Haskell功能产品,它计算列表中的所有元素。

要计算权力 n个 k个,第一个构造带有的列表k个元素,全部存在n个,然后使用产品.

将此想法作为Haskell函数实现电源1.

提示:你必须想出一种方法,用k个元素,均等于n个.使用列表理解,或使用标准Haskell函数复制.如果您使用复制,你可能想使用函数from整数也是!使用胡格尔了解更多标准函数(以及按类型搜索标准函数)。

第3部分

计算幂函数的不同方法使用较少的计算步骤。

我们使用的事实是,如果k个是偶数,我们可以计算n个k个如下:

n个k个=(n个2)k个/2       (k个是偶数)
换句话说:
n个k个=(n个*n个)k个/2       (k个是偶数)
因此,不要递归地使用k个-1,我们使用(小得多的)箱子k个/2.

如果k个不均衡,我们只需向下走一步就可以达到一个偶数k个正如权力的最初定义:

n个k个=n个* (n个k个-1)        (k个不均匀)

总而言之,计算权力 n个 k个:

将此想法作为Haskell函数实现功率2.

提示:

第4部分

我们想要这三种功能权力,电源1,功率2计算相同的东西。测试这个可能是一个好主意!

答:。提出一些测试用例(您将测试函数的输入)。论证您为什么选择这些测试用例。(考虑哪些输入定义了函数,以及函数不是什么输入定义。)

B。实现一个功能推进力(_P)其中给出了n个k个检查一下权力 n个 k个,电源1 n个 k个、和功率2 n个 k个所有人都给出了相同的答案。

C、。作为Haskell编写您在第A部分中建议的所有测试用例执行所有测试用例的函数。使用您在B部分中定义的函数可能是一个好主意。

提示:您可以使用列表理解来组合所有可能的情况您希望测试n和k。使用标准Haskell函数“and”来合并结果。如果您不熟悉列表理解,你不必使用这些。

D。尝试对函数运行快速检查推进力(_P).它可能会失败。如果是,请定义一个新版本,道具(_powers),快速检查成功的。当然,新版本仍应测试预期属性!

提交指南

有关实验截止日期,请参阅课程主页。

将答案写在一个名为实验室1.hs对于每个零件,使用Haskell注释以指示文件的哪个部分包含该部分的答案。对于自然语言的答案,请使用英语;在Haskell评论中写下你的答案。从中删除不相关的内容文件。

在提交代码之前,请清理它!在你觉得你是完成后,花点时间清理代码;简化,删除不必要的东西等。如果您的解决方案不干净,我们将拒绝接受。清洁代码:

请随意使用hlint公司帮助许多这些问题和其他haskell风格的问题。

完成后,请使用消防系统提交。

祝你好运!