2011-01-31 20 views
26

私はHaskellを初めて使っています。これが基本的な質問であればごめんなさい。Haskell:IntがIntのリストにあるかどうか確認してください

私は現在、Intのリストを持っており、変数xをとり、その変数がリストに存在するかどうかによってブール値を返す関数を作成しようとしています。

私は検索してData.List find関数を見つけましたが、この値はブール値を返すようです。

私はGHCiを使用しています。

ありがとう、

答えて

67

まず、必要な機能の種類を探します。

「チェックする」とは、TrueまたはFalseのいずれかを返すことを意味します。ブールです。

ので、機能がINT、INT(別名[INT])のリストを受け取り、ブール値を返します。今

Int -> [Int] -> Bool 

ask hoogle

elem :: Eq a => a -> [a] -> Bool 

Hoogleは非常に便利なツールです。あなたはintegrate it with ghciすることができます。

+5

私はここにgoogle lead me hereをお願いします。あなたはOPに厳しいものである必要はありません。 – fotanus

+6

回答の音質を改善するにはどうすればよいですか?私は厳しくしようとはしていませんでした。 – AtnNn

+10

私の悪い、私は "google"を読んで:-D – fotanus

15

標準elemの機能が存在しない場合は、正しいトラックにfindと表示されている可能性があります。

myElem :: (Eq a) => a -> [a] -> Bool 
myElem x = maybe False (const True) . find (== x) 

私はもっと単純に、このようにそれをやった

myElem x = any (== x) 
myElem x = or . map (== x) 
myElem x = not . null . filter (== x) 
myElem x = foldr (\y b -> y == x || b) False 

など

0

のような、あまりにもそれを実装する他の方法の多くは、あります。

l=[1,2,3,4,5] 


checkIfElem :: Int -> [Int] ->Bool 
checkIfElem x l 
     |x`elem` l =True 
     |otherwise=False 
+12

これは本当にシンプルですが、それは 'checkIfElem = elem'という定義を書くのは信じられないほど複雑な方法です。 (Guardsはすでにブール値をチェックしていますので、 '| condition = True'' | otherwise = False'とすると' = condition'と単純に等価ですので、 'checkIfElem xl = elem xl'両方の議論。) – leftaroundabout

+0

私はこれが単純だとは思わない。 –

関連する問題