首页 > 解决方案 > 将第二个列表参数的第一个元素与第一个列表参数的第一个元素交换,然后使用以下函数返回此列表

问题描述

实施

replaceHead :: [a] -> [a] -> [a]

功能,如标题所述。例如:

replaceHead "okay" "mom" == "mkay"

或者:

replaceHead [0,2,3] [1,20,30] == [1,2,3]

我尝试使用

replaceHead a b = [head b, a]

哪个不编译。对于如何获取 b 的第一个元素,将其与 a 的第一个元素交换,然后返回该列表,我没有更多的想法。你能帮我吗?感谢您提前回答!

标签: listhaskell

解决方案


问题是这a是一个项目列表,而是head b一个项目。因此,从那时起,您就不能使用第一项例如 an ,而is an 。为了满足样本输出,我们还需要处理第一个列表的尾部,而不是整个第一个列表。[head b, a]Inta[Int]

tail a但是,您可以使用(:) :: a -> [a] -> [a]数据构造函数在列表前面添加:

replaceHead :: [a] -> [a] -> [a]
replaceHead a b = head b : tail a

在这里使用模式匹配可能会更好,并将其实现为:

replaceHead :: [a] -> [a] -> [a]
replaceHead (_:as) (b:_) = b : as

在这种情况下,您可能应该定义第一个和/或第二个列表为空的情况:

replaceHead :: [a] -> [a] -> [a]
replaceHead (_:as) (b:_) = b : as
replaceHead [] [] = …
replaceHead [] (b:bs) = …
replaceHead (a:as) [] = …

推荐阅读