小编Mar*_*n V的帖子

理解Haskell中的基本递归

我正在编写一个遗传算法作为我的人工智能课程的项目.我熟悉GA背后的概念,但我对Haskell的经验是有限的.在程序中只剩下一件事要做,那就是创建一个循环我其他函数的函数.我将介绍我的功能并更详细地解释问题:

这是第二代的功能.我得到了父母,交配它们并改变基因组,然后将新的基因组传递到一个列表中:

generation1 = initialPopulation
generation2 = [(mutate (mate (fTTS generation1) (sTTS generation1))) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)

这非常有效.我可以创建新一代并重复:

generation3 = [(mutate (mate (fTTS generation2) (sTTS generation2))) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)

所以对于每一代新人来说,我离目标基因组更近一步(在我的情况下,这是一个字符串).我希望生成新一代,直到达到目标String.我认为一个基本的递归会解决这个问题,如:

g 0 = initialPopulation
g n = [(mutate (mate (fTTS (g (n - 1))) (sTTS (g (n - 1))))) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)

这适用于我的笔记本电脑,直到g(3),但计算需要很长时间.我的问题是我不明白为什么.我认为Haskell递归的工作方式如下:

-- g 0 = [(mutate (mate (fTTS initialPopulation) (sTTS initialPopulation))) | x <- [1..100]] = ["N4kiT","Tu1RT","Tu1R<"]
-- g 1 = [(mutate (mate (fTTS (g 0)) …
Run Code Online (Sandbox Code Playgroud)

recursion haskell

3
推荐指数
1
解决办法
91
查看次数

如何过滤文本文件Haskell中不需要的单词

我正在尝试在Haskell中编写一个可以从文本文档中过滤掉不需要的关键字的程序.文本文档包含有关人员的信息,例如姓名,年龄和城市,我想过滤掉与不符合关键字的人相关的所有信息.

数据库看起来像这样:

"Eric" 27 "London"
"Josefine" 34 "Stockholm"
"Hans" 50 "London"
Run Code Online (Sandbox Code Playgroud)

所以如果关键字是"伦敦",我想要以下输出:

"Eric" 27 "London"
"Hans" 50 "London"
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些不同的方法来存储信息并过滤掉不需要的人,但我现在对如何做到这一点毫无头绪.

haskell

-2
推荐指数
1
解决办法
144
查看次数

标签 统计

haskell ×2

recursion ×1