2013-07-16 7 views
4

나는OCaml에서 패턴과 일치하는 패턴이 있습니까?

let check n = function 
    | n -> true 
    | _ -> false 

그때 내가 Warning 11: this match case is unused.

내가 이해 이유는 무엇입니까, 에서 n 이후 경우 | n -> true은 실제로는 check의 인수가 아닙니다. 이것은 기본적으로 패턴 일치에 의해 생성 된 변수입니다.

제 질문은입니다.이 경우 강제로이 패턴을 검사하기 위해 (다른 경우가 아닌) 패턴 일치를 사용하는 방법이 있습니까?

즉, 나는 n 인수와 패턴 일치를 원한다.

답변

7

당신은 부울 조건과 함께 패턴을 가지고 when를 사용할 수 있습니다

let check n = function 
| x when x = n -> true 
| _ -> false 

그러나, 이것은 아주 특별한되지 않습니다 : 그것이 if를 사용하여 단지 다른 구문입니다.

OCaml은 변수의 에 일치시킬 수있는 모든 종류의 "동적"패턴을 지원하지 않습니다. 패턴은 모두 정적입니다. 이와 같은 동적 패턴을 지원하는 bondi이라는 연구 언어가 있습니다. 이것은 OCaml과 매우 유사합니다. 따라서 이런 종류의 기능에 관심이 있다면 그걸 가지고 놀아야합니다.

2

n_과 동일한 값 (모든 값)과 일치하므로 경고 메시지가 표시되므로 두 번째 일치 사례에 도달 할 수 없습니다. 당신의 프로그램에서 발생할 수있는 문제들에 어떤 것이 있는지.

+0

예, 제 질문에 표시된대로 이해합니다. 내 질문은 내가 함수의 인수를 일치 시키려고하면 어떨까요? –

+1

@JacksonTale 다음은 완전히 동일하다 :'let check = function n -> ...'그리고'let check n = n을 n -> ...' – lukstafi

관련 문제