对列表中的每个元素应用函数

Cam*_*Bak 6 haskell

我创建了一个函数m,这样

m "abc" "def" == "bcd" 
Run Code Online (Sandbox Code Playgroud)

我想创建另一个函数,用于在给定输入时m生成输出["bcd","efg","hia"]["abc","def","ghi"]

的定义m

m :: [a] -> [a] -> [a]
m str1 str2 = (drop 1 str1) ++ (take 1 str2)
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 4

您可以使用zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]此处将整个列表作为第一个参数和tail (cycle l)第二个参数(带有l列表):

combine :: [a] -> [a]
combine l = zipWith m l (tail (cycle l))
Run Code Online (Sandbox Code Playgroud)

zipWith将同时枚举两个列表,并且每次调用m第一个和第二个列表的元素。例如:

Prelude> combine ["abc","def","ghi"]
["bcd","efg","hia"]
Run Code Online (Sandbox Code Playgroud)