2014-03-31 5 views
0

나는 Haskell에 완전히 익숙하다. 그리고 정수리스트와 다른 정수 n이 주어진다면 Boolean을 반환 할 함수를 작성하려고한다. 정수가 목록에 있는지 여부. Haskell :리스트에 원소가 있는지를 알려주는 Boolean 함수 작성하기

그래서 내가 쓴 :

l=[n..m] 
occurs :: Int -> [Int] ->Bool 
occurs x l 
    | x `elem` l = True 
    | otherwise = False 

하지만 구문의 오류 '예기치 ='또는 무엇이든을 얻을.

screenshot of error message

+0

함수가 컴파일됩니다. 전체 오류 메시지를 포함시킬 수 있습니까? – Benesh

+6

'occur = elem'은 맞습니까? 그래서 너는 아무 것도하지 않았다. –

+3

"그러나 'unexpected ='또는 무엇이든'이라는 구문 오류가 발생합니다. 이와 같은 문제에 대한 설명을 게시하지 말고 대신 오류 메시지의 전체 텍스트와 함께 문제에 대한 자세한 설명을 입력하십시오. – bheklilr

답변

6

기능 occurs 잘 컴파일합니다. 그러나 l = [n..m]이라는 표현은 nm에 대한 적절한 정의가 이미 존재하지 않는 한 말도 안됩니다.

코드에 더 큰 문제가 있습니다. elem :: Eq a => a -> [a] -> Booloccurs과 유사한 매우이고, 특히 IntEq의 인스턴스로 간주됩니다.

occurs의 정의에있는 l은 위의 줄의 l = [m..n]과 동일하지 않습니다. 에있는 l은 이 호출 될 때 어떤 값에 바인딩 된 인 무료 변수 입니다. 나는 당신의 질문을 이해하면

0

는 바람직한 기능은 elem

foo :: Eq a => a -> [a] -> Bool 
foo x l = x `elem` l 

foo는이 참 또는 거짓 돌아갑니다 본질입니다.

+1

당신은 또한'foo = elem'이라고 쓸 수 있습니다 –

+1

그래서 "필자는 본질적으로 엘름"이라고 말했던 것입니다. 대답은 단지 엘렉의 메카니즘을 보여주는 것입니다. – user2738335