2
이유는 무엇입니까? 요소를 삭제하지 않더라도 결국 중단되어야한다는 의미입니까?이것은 왜 철저한 검색 패턴이 아닌가?
do_something :: [(String, String, Int)] -> String
do_something [(a, b, c)] = func(a, b, c) ++ do_something(drop 1 [(a, b, c)])
이유는 무엇입니까? 요소를 삭제하지 않더라도 결국 중단되어야한다는 의미입니까?이것은 왜 철저한 검색 패턴이 아닌가?
do_something :: [(String, String, Int)] -> String
do_something [(a, b, c)] = func(a, b, c) ++ do_something(drop 1 [(a, b, c)])
당신은 do_something
당신의 선언에 (String, String, Int)
의 목록은 모든 경우를 지정해야합니다. do_something
에 전달 된 인수가 비어 있거나 요소가 두 개 이상인 경우에 대한 정의를 제공해야합니다. 컴파일러는 이러한 경우를 지정하지 않으면 자동으로 수행 할 작업을 알지 못합니다.
do_something :: [(String, String, Int)] -> String
do_something xs = case xs where
[(a, b, c)] -> func (a, b, c) ++ do_something (drop 1 [(a, b, c)])
-- What about the other cases?
-- otherwise -> ???
또한,이 경우는대로 함수를 지정하는 것이 훨씬 좋을 것 :
그것을 보는 또 다른 방법은 함수 선언에서 그 패턴 매칭이 case 문을 사용하는 것과 동일하다
do_something (x:xs) = func x ++ do_something xs
do_something [] = ???
이것은 실제로 함수를 재귀 적으로 정의합니다. 표현 drop 1 [(a, b, c)]
은 []
를 작성하는 것과 동일하므로 현재의 정의는 정확히 하나 개의 요소가 때를위한
do_something [(a, b, c)] = func (a, b, c) ++ do_something []
에 해당 - 당신이 무슨 말을의 정확한 반대. –
@DanielWagner 엎드려서, 내 머리에 "정의를 해줘야 해 ..." – bheklilr
수정 사항으로, 당신은 내 upvote 있어요. =) –