学习Haskell有哪些好的中间问题和项目?
我最近刚刚开始深入研究,这本书提供了一些很好的练习 然而,我想为人们已经解决的具体问题或他们已经完成的项目提供一些建议,这些建议确实有助于他们更好地理解语言及其能力。什么样的事情能让我全身心投入,真正挑战我学习Haskell有哪些好的中间问题和项目?,haskell,Haskell,我最近刚刚开始深入研究,这本书提供了一些很好的练习 然而,我想为人们已经解决的具体问题或他们已经完成的项目提供一些建议,这些建议确实有助于他们更好地理解语言及其能力。什么样的事情能让我全身心投入,真正挑战我 我对该语言有一定的理解,以前没有使用其他函数式语言的经验;Haskell是我第一次进入这个领域。我发现学习基本的语言结构有助于我感受Haskell。当然,这并不是用Haskell创建一个真正的应用程序,但对我来说,这是一个熟悉该语言特性的好方法。之后,我可能会尝试用Haskell重新编写一些
我对该语言有一定的理解,以前没有使用其他函数式语言的经验;Haskell是我第一次进入这个领域。我发现学习基本的语言结构有助于我感受Haskell。当然,这并不是用Haskell创建一个真正的应用程序,但对我来说,这是一个熟悉该语言特性的好方法。之后,我可能会尝试用Haskell重新编写一些小型python应用程序(其中一些是面向GUI的)。因此,这可能是你的下一步,拿你用另一种语言写的东西,试着用Haskell来做。约翰·休斯(John Hughes)提出了一个问题:找到将数字化唱片集归档到DVD上的最有效方法: 问题如下:
- 我想把我的音乐收藏存档在DVD上。 相册占用300-600MB的空间,但DVD可容纳4700000B的空间。 我想把尽可能多的相册打包成DVD。 如果两个不同的包装使用相同数量的DVD,我更喜欢 在最不完整的DVD上留下最多可用空间的DVD, 以便所有其他DVD都尽可能满。
- 该问题是NP难问题,但基本步骤是使用标准贪婪hueristic:
- 将相册排序到一个列表中,首先是最大的一个。
- 从无限多的空DVD开始。
- 重复 从列表中选取第一张专辑 将相册放入有空间的第一张DVD中 直到列表上没有更多的专辑 烧掉所有的非空DVD。
- 选择第一个具有probabilityp的项目
- 选择概率为×(1-p)的第二项
- 选择概率为p×(1-p)^i-1的第i项
- 以概率选择最后一项(在长度列表中) (1-p)^n-1
- 尽可能重复使用休斯的组合器。
- 你需要在一个无限的随机数列表中搜索。
编写新的高阶函数以帮助您完成此操作。