2014-11-08 3 views
0

튜플 목록 인 매개 변수로 함수를 정의하는 방법은 무엇입니까? 그래서 무엇을Haskell의 함수 매개 변수로 튜플 목록

aFunc :: [(String, Bool)] -> Bool 
aFunc ???? = 

: [(문자열, 부울)] 그래서 여기 가 어떻게 생겼는지입니다 : 그래서 입력의 예 내 기능으로 튜플의리스트를 취

[("hey", False), ("you", True)] 

것 나는 ???? 내 튜플에 액세스 할 수 있습니까? 어떤 도움이라도 좋을 것입니다. 감사.

편집 :

aFunc :: [(String, Bool)] -> Bool 
aFunc aTuple = mapM_ lookup aTuple? 

그래서 어떻게 함수 내 튜플을 액세스합니까? 그건 작동하지 않습니다.

+0

질문이 너무 막연합니다. 어떤 기능을 구현하려고합니까? – Benesh

+0

난 그냥 내 튜플에 어떻게 접근 할 수 있는지 이해하려고 노력 중이다. 그래서 보통 나는 비슷한 것을 할 것입니다. aFunc :: String -> Bool -> Bool aFunc stringInput aBool = case aBool of ... 내가 무엇에 배치할까요? 튜플 목록의 항목에 액세스하기 위해 stringInput 또는 aBool 대신. – pmac89

+0

튜플 목록에 특별한 것은 없습니다. 인수를 목록으로 취급해야합니다. 그 항목은 음, 튜플입니다. 좀 더 구체적인 답변이 필요합니다. – Benesh

답변

4

자신의 버전을 lookup으로 구현하려는 것 같습니다.

lookup' :: String -> [(String,Bool)] -> Bool 
lookup' k lkp = head $ [v | (k',v) <- lkp, k'==k] 

또는 사용 filter : 당신은 지능형리스트 사용하여 간단한 버전을 쓸 수

lookup'' :: String -> [(String,Bool)] -> Bool 
lookup'' k lkp = snd $ head $ filter ((==k) . fst) lkp 

공지 사항이 버전은 안전하지 않은 것을 - 즉, 그들은 추한과 가치가없는 오류는 IF와 함께 실패 할 것입니다 당신은 당신의 자신의 사용자 지정 오류 메시지를 작성하여이 문제를 해결할 수

ghci> lookup' "foo" [("bar",True)] 
*** Exception: Prelude.head: empty list 

: 목록 항목을 포함하지 않는

,536 라이브러리 버전이 방법을 받아,보다 일반적인 서명이

lookupMaybe :: String -> [(String,Bool)] -> Maybe Bool 
lookupMaybe k lkp = case [v | (k',v) <- lkp, k'==k] of 
        (v:_) -> Just v 
        [] -> Nothing 

:

lookupErr :: String -> [(String,Bool)] -> Bool 
lookupErr k lkp = case [v | (k',v) <- lkp, k'==k] of 
        (v:_) -> v 
        [] -> error "Key not found!" 

더 좋은 방법은 Maybe Bool 대신에 반환하는 것입니다

lookup :: (Eq a) => a -> [(a,b)] -> Maybe b 

을 당신은 그것의 구현을 읽을 수 here .

+0

이것은 실제로 내가 찾고 있던 것이지만 나 자신을 찾으려고 노력하고있었습니다. 감사. 정말 감사. – pmac89

+0

내 답변이 너무 구체적이라면 도움이되어 기쁘고 미안합니다. ['Data.List' 소스 코드] (http://hackage.haskell.org/package/base-4.7.0.1/docs/src/GHC-List.html)를 통해 읽으면 하스켈 기초를 배울 수 있습니다. 그것은 우아한 방법으로 구현 된 많은 간단한 함수를 포함하고 좋은 하스켈 습관을위한 훌륭한 소스입니다 :) – Benesh