1. ホーム
  2. haskell

[解決済み] haskellにおけるdrop関数 - リスト内包を用いた実装

2022-02-18 09:23:28

質問

私のドロップ機能を見てください。確かに動いていますね。これは怠慢なもので、無限リストに対して動作します。

drop3 :: Int -> [a] -> [a]
drop3 n xs = [x | (x, y) <- zip xs [1..], y > n]

リスト内包を使った他の書き方はないのでしょうか?

どのように解決するのですか?

というご質問の場合、通常の 再帰的 のアプローチです。

drop' :: Int -> [a] -> [a]
drop' _ [] = []
drop' n xs@(_:xs')
   | n > 0     = drop' (n-1) xs'
   | otherwise = xs

を黙って受け入れることに注意してください。 ネガティブ ドロップと トゥーマッチ のようにドロップします。

  • drop' (-1) [1..4] = [1,2,3,4]
  • drop' 10 [1..4] = []