list - 将第二个列表参数的第一个元素与第一个列表参数的第一个元素交换,然后使用以下函数返回此列表
问题描述
实施
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 的第一个元素交换,然后返回该列表,我没有更多的想法。你能帮我吗?感谢您提前回答!
解决方案
问题是这a
是一个项目列表,而是head b
一个项目。因此,从那时起,您就不能使用第一项例如 an ,而is an 。为了满足样本输出,我们还需要处理第一个列表的尾部,而不是整个第一个列表。[head b,
a]Int
a
[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) [] = …
推荐阅读
- ios - CGPath 与 UIBezierPath
- android - 在 Android 中构建 Unity 应用程序时出错
- angular - 将 kendo-angular 消息与 ngx-translate 一起使用?
- javascript - 如何使用 ES6 编写 ReactJS 高阶组件?
- android - 自定义 Android 按钮图像周围的红色圆圈
- python - Node js+Laravel +python 通信进行混合应用开发
- java - 在 C++ 项目中获取名称解析
- python - 将数据排序到多索引数据框中
- html-email - 如何在 gmail 的 html 电子邮件内容中显示图像?
- poco-libraries - POCO-Liberaries:: Poco Key expiry time not working in set 方法