2011-01-31 4 views
26

하스켈을 처음 사용합니다. 근본적인 질문 인 경우 죄송합니다.하스켈 : Int가 Int의 목록에 있는지 확인하십시오.

현재 Int의 목록이 있는데 변수 x를 사용하고 변수가 목록에 있는지 여부에 따라 부울을 반환하는 함수를 만들려고합니다.

나는 검색을했고 Data.List 찾기 함수를 찾았지만이 선량은 부울을 반환하는 것 같습니다.

저는 GHCi를 사용하고 있습니다.

감사합니다.

답변

67

먼저 필요한 기능의 유형을 찾으십시오.

"확인"은 True 또는 False 인 Bool을 반환하는 것을 의미합니다.

그래서 함수는 INT, 지능 (일명 [지능])의리스트를 취하고 부울을 리턴하기 ask hoogle

Int -> [Int] -> Bool 

한다.

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

Hoogle은 매우 유용한 도구입니다. 당신은 integrate it with ghci 일 수 있습니다.

+5

google이 나를 이끌어주고 있습니다. 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'이라는 정의를 작성하는 엄청나게 복잡한 방법이라고 할 수 있습니다. 왜냐하면 그것과 정확히 동일하기 때문입니다! (가드는 이미 불리언 값을 검사하고,'| condition = True'' | otherwise = False' 그러므로 간단히'= condition'과 같습니다 .' checkIfElem xl = elem xl'을 남겨 둡니다. 양측의 논쟁.) – leftaroundabout

+0

나는 이것이 간단하다고 생각하지 않는다. –

관련 문제