Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
学习Haskell有哪些好的中间问题和项目?_Haskell - Fatal编程技术网

学习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。
请解决以下编程问题:

  • 通过编写函数实现标准贪婪算法 pack :: [(Album, Integer)] -> [DVD] 包装::[(相册,整数)]->[DVD] 哪里 键入相册=字符串 键入DVD=[相册] 如Hughes所述,将解决方案分解为单独的函数。
  • 包装的结果是包装顺序的纯函数 相册出现在列表上。 你可以 使用气泡搜索改进包装: 以排序后的列表为例,使用以下算法生成新列表: repeat probabilistically choose an item from the old list remove that item from the old list and place it at the end of the new list until the old list is empty 重复 可能会从旧列表中选择一项 从旧列表中删除该项并将其放置在列表的末尾 新名单 直到旧列表为空 然后在扰动列表上执行贪婪装箱算法。 如果包装有所改进,则新的订购将成为 进一步的扰动。 概率选择由概率型参数化:
    • 选择第一个具有probabilityp的项目
    • 选择概率为×(1-p)的第二项
    • 选择概率为p×(1-p)^i-1的第i项
    • 以概率选择最后一项(在长度列表中) (1-p)^n-1
    问题是如何通过气泡搜索实现打包 你的函数可以作为一个参数,需要一个无限的随机变量列表 数字。 当p=0.45且迭代次数为10000次时,气泡搜索可以保持一致 制作DVD的包装,其容量超过99.5%。 提示:

    • 尽可能重复使用休斯的组合器。
    • 你需要在一个无限的随机数列表中搜索。 编写新的高阶函数以帮助您完成此操作。
    周六在沃尔玛和购物中心购物后,您是否已经为iphone编写了这篇文章来打包您的SUV。谢谢大家的回复! type Album = String type DVD = [Album] repeat probabilistically choose an item from the old list remove that item from the old list and place it at the end of the new list until the old list is empty