我刚刚开始潜入Real World Haskell,这本书提供了一些很好的练习练习.
但是,我想对人们已经解决的具体问题或者他们已经完成的项目提出一些建议,这些建议确实帮助他们更好地理解了语言及其功能.我可以抛出什么样的东西真的会挑战我?
我对该语言有一定程度的理解,之前没有其他功能语言的经验; Haskell是我第一次跳进这个舞台.
Jay*_*son 13
我发现Project Euler有助于学习基本的语言结构,以帮助我了解Haskell.当然,这不是用Haskell创建一个真正的应用程序,但对我来说这是一个很好的方式来熟悉语言的功能.在那之后,我可能会尝试在Haskell中重写一些我的小python应用程序(其中一些是面向GUI的).所以,这可能是你的下一步,拿你用另一种语言写的东西,并试着在Haskell中做.
这是John Hughes 撰写的为什么功能编程重要的问题:找到将数字化唱片专辑存档到DVD上的最有效方法:
问题如下:
如果两个不同的包装使用相同数量的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包装.
提示: