比较两个列表之间的元素-Haskell

马丁五世

这可能是一个愚蠢的问题,但是我已经在这个问题上停留了几个小时。.我已经制定了遗传算法,但认为我可以尝试对其进行一些改进。我想做一个适应度函数,比较两个数字列表并返回一个值。如果两个列表包含的数字相同且在同一“位置”,则函数应返回+2。如果列表包含的数字相同但在错误的位置,则应返回+ 1。

我已经完成了两个不同的功能,都可以完成其中一项任务,但是我无法将它们合并为一个功能。功能如下:

samePlace _ [] = 0
samePlace [] _ = 0
samePlace (x:xs) (y:ys)
    | x == y = (sP xs ys) + 2
    | otherwise = sP xs (ys)

此函数在相同的位置和正确的位置返回的每个数字都返回+2。

notSamePlace [] _ = 0
notSamePlace _ [] = 0
notSamePlace (x:xs) (ys)
    | elem x (ys) = (notSamePlace xs ys) + 1
    | otherwise = (notSamePlace xs ys)

此函数返回+ 1是第二个列表中第一个列表中存在的数字。

我遇到的问题是,同位功能需要将两个列表分开,并一次通过一个数字来比较它们,而异位功能则需要保持第二个列表完整而不拆分头和尾巴向上。如果有人能指出正确的方向如何解决这个问题,我将非常感激。

而且,我认为该功能可以缩短在遗传算法中找到解的时间。如果我的解决方案是找到字符串“ hello world”,则我认为具有基因“ leolh owdrl”的人应该比看起来像“ hFz%l r0M / z”的基因具有更大的适应性。到目前为止,在我的程序中,第一个基因的适应度值为1(因为“空格”是与目标字符在同一位置的唯一字符),但是第二个基因的正确性是“ h”和“空格”它的适应性值为2。这是一个好主意吗?

谢谢!

卡波

下面的函数用于zip索引每个字符,从而允许将第二个完整列表传递给递归调用。

places :: String -> String -> Int
places _ [] = 0
places [] _ = 0
places xs ys = zippedPlaces (zip xs [1..length xs]) (zip ys [1..length ys])

zippedPlaces :: [(Char, Int)] -> [(Char, Int)] -> Int
zippedPlaces [] _ = 0
zippedPlaces (x:xs) ys =
    let match = filter (\(num, i) -> fst x == num) ys
    in case match of
        [] -> zippedPlaces xs ys
        (a:_) -> (if snd a == snd x then 2 else 1) + zippedPlaces xs ys

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何编写一个map语句来比较haskell中两个列表的每个元素?

来自分类Dev

如何从对列表中将每个对的两个元素相乘-Haskell

来自分类Dev

如何从Haskell的两个列表中提取相同的元素?

来自分类Dev

Haskell:在列表中找到两个相关元素

来自分类Dev

使用 foldl 或 foldr 返回列表中两个元素首次出现之间的整数距离的间隙函数。(Haskell)

来自分类Dev

根据Haskell中第三个列表的元素从两个列表中选择元素

来自分类Dev

比较Haskell中的列表元素

来自分类Dev

Haskell 用 if 语句比较两个 int

来自分类Dev

Haskell - 比较两个字符串列表并返回一个单词出现的次数?

来自分类Dev

如何在haskell中添加两个列表?

来自分类Dev

在Haskell中逐点添加两个列表

来自分类Dev

Haskell从两个列表中绘制函数参数

来自分类Dev

传递两个列表时的Haskell类型匹配错误

来自分类Dev

如何在haskell中添加两个列表?

来自分类Dev

Haskell从两个列表中绘制函数参数

来自分类Dev

在Haskell中逐点添加两个列表

来自分类Dev

Haskell 使用 foldr 添加两个列表

来自分类Dev

带有两个参数的 Haskell 列表过滤

来自分类Dev

压缩两个函数产生的两个列表(Haskell)

来自分类Dev

如何比较两个列表元素?

来自分类Dev

比较两个不同列表的元素

来自分类Dev

列表之间的两个公共元素

来自分类Dev

Haskell,从一个列表的元组中拉出两个列表

来自分类Dev

在 Haskell 中将两个函数相加

来自分类Dev

了解两个Haskell签名之间的区别,其中一个使用forall

来自分类Dev

当任何两个元素之间的比较可能不明确时,对列表进行排序?

来自分类Dev

Haskell:同时遍历两个列表的三个字段

来自分类Dev

Haskell中列表的第K个元素

来自分类Dev

比较两个列表中的元素并添加不同的元素

Related 相关文章

  1. 1

    如何编写一个map语句来比较haskell中两个列表的每个元素?

  2. 2

    如何从对列表中将每个对的两个元素相乘-Haskell

  3. 3

    如何从Haskell的两个列表中提取相同的元素?

  4. 4

    Haskell:在列表中找到两个相关元素

  5. 5

    使用 foldl 或 foldr 返回列表中两个元素首次出现之间的整数距离的间隙函数。(Haskell)

  6. 6

    根据Haskell中第三个列表的元素从两个列表中选择元素

  7. 7

    比较Haskell中的列表元素

  8. 8

    Haskell 用 if 语句比较两个 int

  9. 9

    Haskell - 比较两个字符串列表并返回一个单词出现的次数?

  10. 10

    如何在haskell中添加两个列表?

  11. 11

    在Haskell中逐点添加两个列表

  12. 12

    Haskell从两个列表中绘制函数参数

  13. 13

    传递两个列表时的Haskell类型匹配错误

  14. 14

    如何在haskell中添加两个列表?

  15. 15

    Haskell从两个列表中绘制函数参数

  16. 16

    在Haskell中逐点添加两个列表

  17. 17

    Haskell 使用 foldr 添加两个列表

  18. 18

    带有两个参数的 Haskell 列表过滤

  19. 19

    压缩两个函数产生的两个列表(Haskell)

  20. 20

    如何比较两个列表元素?

  21. 21

    比较两个不同列表的元素

  22. 22

    列表之间的两个公共元素

  23. 23

    Haskell,从一个列表的元组中拉出两个列表

  24. 24

    在 Haskell 中将两个函数相加

  25. 25

    了解两个Haskell签名之间的区别,其中一个使用forall

  26. 26

    当任何两个元素之间的比较可能不明确时,对列表进行排序?

  27. 27

    Haskell:同时遍历两个列表的三个字段

  28. 28

    Haskell中列表的第K个元素

  29. 29

    比较两个列表中的元素并添加不同的元素

热门标签

归档