haskell - 使用haskel实现快速排序
问题描述
我想知道为什么下面的快速排序代码显示“未解决的顶级重载错误”
sort = \xs -> case xs of
[] -> []
y:ys -> sort[p | p <- ys, p < y]
++ y:sort[p| p <- ys, p > y]
你能告诉我为什么吗?
解决方案
无法推断此函数的类型,因为使用 和 的约束可能有多种<
类型>
。您可以通过添加如下签名(尽可能通用)来解决此问题。顺便说一句,您的实现会删除重复出现的元素。使用<=
而不是<
修复此问题:
sort :: Ord a => [a] -> [a]
sort = \xs -> case xs of
[] -> []
y:ys -> sort[p | p <- ys, p <= y]
++ y:sort[p| p <- ys, p > y]
示例调用(双 7):
> sort [12,34,2,4,7,6,34,7,3]
[2,3,4,6,7,7,12,34,34]
推荐阅读
- python - 如何使用熊猫从目录中的excel表中获取每一行值
- javascript - nodejs ws 库——如何防止暴力攻击(密码和崩溃)
- redis - Coldfusion 2016 API 管理器在重启后没有出现
- python - 从 Docker 容器调用主机系统中的文件
- angular - 在单个 Angular 应用程序中路由多个项目
- android - 按 CTRL+M 时,android 模拟器上会出现一些东西
- android - 我们可以使用动态功能模块作为 SDK 吗?
- opencv - 如何在 Ubuntu 的 Pycharm 中导入 cv2
- java - 堆排序中的 Java 计数交换
- php - 尝试发送电子邮件时不允许使用 SendGrid API 405 方法