그냥
let f x y = function -> <code>
정말 바로 가기 (또는 문법 설탕)이라고 기억 : 그래서
let f x y z = match z with -> <code>
, 그냥 함수의 마지막 인수를 인하하고, 자동으로 일치합니다.
또한 패턴 매칭을 염두에두면 패턴 일치의 왼쪽에있는 모든 표현식이 동일한 유형이어야합니다. 그렇지 않으면, 컴파일러는 임의의 것을 고르고, 다른 모든 것이 같은 타입을 가지고, 다소 혼란스러운 에러 메시지를내는 것을 결정할 수있다. 매치 매치의 오른쪽 면도 마찬가지입니다. 당신이 컴파일러 메시지를 볼 때, 그 무언가를 말하는 것은 바로이 전제 조건을 확인, 그가 기대 한 것이 아니다 :
| [] (* is a list, by definition *)
| (a,b) -> [] (* is a pair, by definition of a pair *)
| (a,b)::ris -> ris (* is a list, by definition of (::) *)
왼쪽 작동하면 오른쪽에 보인다.
또한 사용할 필요가없는 변수가있는 경우 밑줄 또는 밑줄로 시작하는 이름을 지정하는 것이 좋습니다.
let cut = function
| [] -> []
| _::xs -> xs
출처
2014-10-15 11:25:49
ivg