6

リストと要素を取り、要素の最初の出現が削除されたリストを返す関数を作成する必要があります:

removeFst [1,5,2,3,5,3,4,5,6] 5
[1,2,3,5,3,4,5,6]

私が試したのは:

main :: IO()
main = do
    putStr ( show $ removeFst [1,5,2,3,5,3,4,5,6] 5)

removeFst :: [Int] -> Int -> [Int]
removeFst [] m = []
removeFst [x] m
    | x == m     = []
    | otherwise  = [x]
removeFst (x:xs) m 
    | x == m     = xs
    | otherwise  = removeFst xs m

しかし、これは機能しません...最初の要素のないリストを返します。リストを次のようにするには、再帰呼び出しを行う必要があると思います。

removeFst (x:xs) m
    | x == m     = xs
    | otherwise  = removeFst (-- return the whole list till element x) m
4

2 に答える 2

2

あなたの機能は と同等であることに注意してくださいData.List.delete

ここで別のバージョン:

import Data.List

removeFst xs x = front ++ drop 1 back where 
  (front, back) = break (==x) xs
于 2013-06-29T21:54:54.663 に答える