2017-04-09 9 views
1

整数のリストを取る関数をHaskellに書き込もうとしていて、mがそのリストの要素であれば、mなしでリストを出力します。そうでなければリストを出力します。私は書いた整数をリストから削除する

rmvFirst :: Int -> [Int] -> [Int] 
rmvFirst m []       = error "Empty"      
rmvFirst m [x]  | x == m  = error "Empty Set" 
rmvFirst m (x:xs) | x == m  = (xs) 
rmvFirst m (x:xs) | otherwise  = rmvFirst m (xs) 

3 [1..5]を入力すると[4..5]が出力されます。しかし、私は{1,2,4,5}を望んでいます。私が使っている本はminmaxしか定義されていません。

+0

どのような言語ですか? –

+1

空の入力または空の結果がエラーとなるのはなぜですか?それは非常に驚くべきことです!また、リストに 'm'のコピーがいくつかある場合、何をしたいですか? – dfeuer

+0

@dfeuer空の入力にエラーがあると、状況によっては意味があります。つまり、あなたの関数が実際に要素を削除しているかどうかを確認したいのですが、そうでない場合は別の場所にバグがありますので、今すぐ報告したいかもしれません。もう一方で、空の出力のエラーは_really_奇妙です、私はその選択肢の正当性を見つけることができません。 – chi

答えて

2

@hugomgがコメントしたように、あなたの最後のケースは間違っています。

rmvFirst :: Int -> [Int] -> [Int] 
rmvFirst m []       = error "Empty" 
rmvFirst m [x]  | x == m  = error "Empty Set" 
rmvFirst m (x:xs) | x == m  = (xs) 
rmvFirst m (x:xs) | otherwise  = x : rmvFirst m (xs) 
3

エラーは最後のケースです。 mと等しくないリストの先頭にあるxが、返すリストの一部であることを確認する必要があります。

+0

私はそれが問題だと思います。その構文は何ですか? –

関連する問題