如何修改Haskell自定义drop1函数 实现仅首次检查输入参数合法性
实现方案
核心思路是将递归逻辑抽离到内部辅助函数中,仅在外层主函数完成首次入参校验,递归过程不再重复执行校验逻辑。
修改后的完整代码如下:
drop1 n xs | n < 0 = error "Use positive numbers" | otherwise = go n xs where go _ [] = error "Empty list" go 0 xs = xs go n xs = go (n-1) (tail1 xs)
逻辑说明
- 外层
drop1仅在首次调用时执行一次n < 0的合法性校验,校验不通过直接抛出异常 - 校验通过后调用内部函数
go执行递归删除逻辑,go函数不需要再重复校验n的合法性,有效降低了不必要的性能开销 - 原有空列表报错、递归终止逻辑、核心删除逻辑完全保留,和原有实现功能完全一致
内容的提问来源于stack exchange,提问作者user17221096
相关产品推荐
相关产品推荐

