使用不同的函数将映射应用于列表的每个元素

Xze*_*non 0 haskell functional-programming list

我目前有这段代码:

function string keys = map (xor 1) (map ord string)
Run Code Online (Sandbox Code Playgroud)

它从字符串中获取每个元素,并将xor与1一起使用.我想通过用键中的任何元素替换1来使地图函数更高级.

因此,举例来说,如果string == "Test"和keys = [1,3,6,9]我会得到:

'T' xor 1
'e' xor 3
's' xor 6
't' xor 9
Run Code Online (Sandbox Code Playgroud)

有没有办法迭代所有键的元素,以便我可以实现这一点?我对Haskell很新,我对它的概念没有很好的把握.

我解决这个问题的尝试是:

function string keys = map (iterate xor keys) (map ord string)
Run Code Online (Sandbox Code Playgroud)

但我得到了一些错误,我猜这是因为迭代功能.

任何帮助将不胜感激!


正如我发布的那样,我注意到iterate做了一个完全不同的事情,所以在这一点上我知道为什么它不起作用,但我不知道如何替换它.

Bak*_*riu 6

您希望将列表中的一个元素与另一个列表中的一个元素相关联.这通常被称为拉链.在zipWith似乎做你想要什么:

Prelude Data.Bits> zipWith xor [1, 3, 5] [10, 23, 44]
[11,20,41]
Run Code Online (Sandbox Code Playgroud)

它需要一个a -> b -> c函数,一个[a]列表和一个[b]列表,并将函数元素与两个列表中的相应元素一起应用.

它是zip产生element(zip = zipWith (,))对的函数的推广.

  • @Xzenon您可以使用[hoogle](https://www.haskell.org/hoogle/)按名称或类型查找功能.例如,在你的情况下,你想要类型为`(a - > a - > a) - > [a] - > [a] - > [a]`的东西,搜索东西产生[这些结果](https:// www.haskell.org/hoogle/?hoogle=%28a+-%3E+a+-%3E+a%29+-%3E+[a]+-%3E+[a]+-%3E+ [a])你可以其中也见`zipWith`.您还应该检查`Prelude`模块以查看最有用的功能. (2认同)