热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Haskell如何删除列表的所有0,直到其中一个元素/=0?

我是Haskell的新手,我正在尝试弄清楚如何编写代码,该代码将删除所有零,直到列表中的元素>0。例如:输入:[0,0,5,6,0

我是 Haskell 的新手,我正在尝试弄清楚如何编写代码,该代码将删除所有零,直到列表中的元素 > 0。

例如:

输入:[0,0,5,6,0]

输出:[5,6,0]

到目前为止,我已经写了这个:

zeroUntil :: [Int] -> [Int]
zeroUntil [] = []
zeroUntil (x:xs)
| x == 0 = drop x (xs)
| otherwise = zeroUntil xs

但不知何故[5,6,0]我得到[]

任何人都可以解释我做错了什么吗?

回答


您可以使用dropWhile :: (a -> Bool) -> [a] -> [a]并丢弃物品,只要这些物品为零:

zeroUntil :: [Int] -> [Int]
zeroUntil = dropWhile (0 ==)

如果您想删除零直到元素大于零,您可以使用递归。如果这些小于零,您的递归案例应该产生元素:

zeroUntil :: [Int] -> [Int]
zeroUntil [] = []
zeroUntil (0:xs) = zeroUntil xs
zeroUntil (x:xs)
| x > 0 = x : xs -- ← end of recursion, return the list
| otherwise = x : zeroUntil xs -- ← yield x and recurse

例如:

Prelude> zeroUntil [0,0,5,6,0]
[5,6,0]
Prelude> zeroUntil [0,-1,5,6,0]
[-1,5,6,0]






推荐阅读
author-avatar
好宝贝蛋_282
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有