2014-07-21 2 views
0

함수가 비어있을 수있는 인수 중 하나 인 list을 허용하고 함수 자체가 비어있는 것으로 처리하면 (즉, 비어있을 것으로 예상 함), 하스켈에서 다루는 방법은 무엇입니까? 목록을 사용하거나 목록을 사용 하시겠습니까?목록을 전달하거나 목록을 전달 하시겠습니까?

foo [] = 
    -- do something if list is empty 
    ... 

foo (x:xs) = 
    -- do something if list is not empty 
    ... 
+0

왜 어쩌면 목록을 전달하려고합니까? 필자는 목록이 매개 변수로 필요하지 않은 함수의 두 번째 변형을 구현하는 것이 더 좋을 것이라고 생각합니다. 그런 다음 함수의 호출 측에서 목록을 호출하거나 목록이 필요하지 않은지 결정합니다. –

+1

'head'와 같은 일부 표준 함수는 비어 있지 않은 목록을 필요로한다는 사실에 혼란 스러울 수 있습니다. 이 기능들은 이제 오용으로 널리 간주됩니다. 왜냐하면리스트 타입은'[]'이 좋은 값이라는 것을 거의 항상 이해하고 있습니다. 하나 이상의 요소가 있음을 표현하기 위해 ['NonEmpty'] (http://hackage.haskell.org/package/NonEmpty-0.1/docs/Data-List-NonEmpty.html)를 사용할 수 있습니다. – leftaroundabout

답변

8

유형 [a]의 값이 목록은 다음과 같습니다

+0

그래서 대답은 두 가지 옵션 (목록 및 아마도 목록 일 수 있음)이 허용됩니까? –

+0

@AlexanderSupertramp, 그들은 모두 잠재적으로 유용하지만, 그들은 다른 것을 의미합니다. 비어 있거나 비어 있지 않은 목록 만 원한다면'Maybe '를 가져올 필요가 없습니다. – dfeuer

+0

좀 더 고급 설정 (아마도 "아마도"모나드 또는 '펼치기')에서 아마 [아마]를 만날 가능성이 높습니다. 그러나보다 현실적인 간단한 예제는'safeTail [] = Nothing; safeTail (_ : as) = ​​그냥. – dfeuer

0

이에 대한 패턴 매칭을 사용할 수 있습니다. 그것은 비워 둘 수 있습니다. Maybe [a] 유형의 값은 Nothing 또는 Just xs이며, xs은 가능한 빈 목록입니다. 예 : 종이 한 장을 가져다가 쇼핑 목록이 있는지 여부를 알려주는 함수를 작성하고 있다고 가정 할 경우 쇼핑 목록에있는 항목을 작성한다고 가정합니다. 이 기능에 낱장 악보를 제공하면 Nothing이 반환됩니다. "쇼핑 목록"이라는 표제가 있지만 그 밖의 항목이없는 페이지는 Just []을 반환합니다. "쇼핑 목록"이라는 제목과 실제 ​​상품이있는 페이지를 제공하면 Just ["Anchovy milkshake", "Potato juice", "Cow pies", "Chicken milk"]을 반환합니다. 이것은 Maybe [String] 유형으로 표시됩니다.

+0

질문을 이해하지 못했습니다. –

관련 문제