我刚刚开始潜入Real World Haskell,这本书提供了一些很好的练习练习。
但是,我想对人们已经解决的具体问题或他们已完成的项目提出一些建议,这些建议确实帮助他们更好地理解语言及其功能。我可以抛出什么样的东西真的会挑战我?
我对该语言有一定程度的理解,之前没有其他功能语言的经验;哈斯克尔是我第一次跳进这个舞台。
答案 0 :(得分:12)
我发现Project Euler有助于学习基本语言结构,以帮助我了解Haskell。当然,这不是用Haskell创建一个真正的应用程序,但对我来说这是一个很好的方式来熟悉语言的功能。在那之后,我可能会尝试在Haskell中重写一些我的小python应用程序(其中一些是面向GUI的)。所以,这可能是你的下一步,拿你用另一种语言写的东西,并试着在Haskell中做。
答案 1 :(得分:6)
这是John Hughes在Why Functional Programming Matters启发的问题:找到将数字化唱片专辑存档到DVD上的最有效方法:
问题如下:
如果两个不同的包装使用相同数量的DVD,我更喜欢 在最不完整的DVD上留下最多可用空间的一个, 这样所有其他DVD都尽可能充满。
repeat take the first album from the list put the album in the first DVD that has room for it until there are no more albums on the list烧掉所有非空的DVD。
请解决这些编程问题:
pack :: [(Album, Integer)] -> [DVD]哪里
type Album = String type DVD = [Album]将您的解决方案分解为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然后在扰动列表上进行贪心打包算法。 如果包装改进,则新的订购成为基础 进一步的扰动。
概率选择由概率 p 参数化:
问题是通过Bubble Search实现打包
你的函数可以作为一个参数需要一个无限的随机列表 数字。
使用 p = 0.45 和10,000次迭代,气泡搜索可以始终如一 生产满99.5%的DVD包装。
提示:
答案 2 :(得分:2)
我(慢慢)也在学习Haskell,我正在使用教程Write Yourself a Scheme in 48 Hours。也许它可以帮助你遵循它,如果你想要你可以随时扩展它。
答案 3 :(得分:1)
我建议您查看以下Stack Overflow问题中评分最高的答案。我发现建议的学习和活动轨道是最全面的。在中间层面,作者建议修改特定的Monads和库。我至少发现它是一个很好的帮助。
话虽如此,我不知道您与其他语言或概念的相对专业水平。当我开始寻找中间的“挑战”时,我的目标并不是很高。我是世界各地的初学者。我会说你对操作列表的任何使用都会成为一个很棒的项目。
答案 4 :(得分:1)
rubyquiz.com有很多很好的练习,可以很好地映射到haskell。 haskell wiki有一些但不是全部的haskell实现。
答案 5 :(得分:1)
我发现这个项目很有趣并且有很好的学习记录。