gpt4 book ai didi

haskell - 如何返回从列表前面移除指定数量的元素的列表

转载 作者:行者123 更新时间:2023-12-02 05:29:01 24 4
gpt4 key购买 nike

我正在 Haskell 中编写一个函数,它递归地返回从列表前面删除指定数量的元素的列表。我已经开始这样做了:

removefront :: Int -> [Int] -> [Int]
removefront n xs =
if n <= 0 then xs
else removefront (n-1) (tail xs)

这可以正常工作并且完全符合我的要求,但是有没有一种方法可以在没有尾部功能的情况下做同样的事情。谢谢!

最佳答案

这个函数是“内置”的,因为它在前奏中并称为 drop

*Main> :t drop
drop :: Int -> [a] -> [a]
*Main> drop 3 [1,2,3,4,5,6,7]
[4,5,6,7]

现在,我假设这不是您要找的答案。您可以轻松修改您的函数以不使用尾部。诀窍是使用模式匹配。

removefront :: Int -> [Int] -> [Int]
removefront n (x:xs) = if n <= 0 then (x:xs) else removefront (n-1) xs

三个注意事项

  1. 大多数 Haskeller 不会对这样的函数使用 if then else,更喜欢守卫

    removefront n (x:xs) 
    | n <= 0 = (x:xs)
    | otherwise = removefront (n-1) xs
  2. removefront 的类型可以更通用

    removefront :: Int -> [a] -> [a]

    其实可以一直到

    removefront :: (Num i, Ord i) => i -> [a] -> [a]

    但是这有点过分了

  3. 您应该考虑将空列表交给函数时会发生什么——您希望它做什么?

关于haskell - 如何返回从列表前面移除指定数量的元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com