, parseArgs [x, y]
그것은 단지 정확히 두 요소의 목록을 받아 의미한다. 따라서 length [x, y]
은 항상 2이고 해당 조건 (> 2) (< 2)은 결코 충족되지 않습니다.
otherwise
은 항상 두 가지 요소의 목록입니다. 따라서 입력이 두 요소의 목록 일 때, x와 y를 얻을 수 있고 그것들을 확실히 튜플로 만들 수 있습니다.
그러나 그 외의 경우 parseArgs []
parseArgs ["a"]
parseArgs ["a","b","c"]
인 경우 "함수 parseArgs의 비 포괄적 패턴"예외가 발생합니다. 코드가 모든 패턴을 포함하지 않았기 때문입니다 [String]
여기에 출력하기 위해 Maybe (String, String)를 사용합니다. 이것은 parseArg가 Just (String, String) 또는 Nothing을 생성 함을 의미합니다. 아마도 그것은 당신이 원하는 것에 더 가깝습니다.
그래서이 시도 : Y : 입력 [문자열] × 될 일 경우 의미
parseArgs :: [String] -> Maybe (String, String)
parseArgs x:y:[] = Just (x,y)
parseArgs xs = Nothing
[(정확한 개의 문자열리스트) 단 (X, Y)를 생성한다. 그 외에는 아무것도 생산하지 마십시오. 이 방법으로 [String]의 모든 패턴을 다룹니다. 두 요소 목록이 아닌 경우 Nothing
을 얻을 수 있습니다.
편집 : 두 번째로 @ pdoherty926의 parseArgs _ = Nothing
은 와일드 카드 _는 "그 외 모든 것"을 표현하는 더 좋은 방법입니다.