이 두 가지 개념을 보는 한 가지 방법은 패턴 일치가 생성자에 대한 차별을 결합하고 용어를 동시에 (단어 조각을 선택하고 로컬로 명명하는 한편) 안전하고 간결하며 효율적으로 만드는 프로그래밍 언어의 기능 이라고 말하는 것입니다 . 패턴 매칭에 대한 연구는 일반적으로 구현 효율성, 예를 들어 매칭 메커니즘이 수행해야하는 비교 횟수를 최소화하는 방법에 중점을 둡니다.
반대로, 용어 재 작성은 구문 표현의 하위 용어 (보다 정확하게는 일부 변수 집합에 대한 용어 대수 요소)를 다른 용어로 대체하는 광범위한 (잠재적으로 비 결정적) 방법을 조사 하는 일반적인 계산 모델입니다 . 용어 재 작성 시스템에 대한 연구는 일반적으로 합류, 결정론 및 종료와 같은 재 작성 시스템의 추상적 특성에 관한 것입니다.보다 구체적으로, 재 작성 시스템의 대수 연산에 의해 이러한 특성이 어떻게 보존되는지, 즉 이러한 특성이 어느 정도까지 구성되는지에 관한 것입니다.
분명히 둘 사이에 개념적 겹침이 있으며 구별은 기술적 인 것이 아니라 전통적인 정도입니다. 기술적 인 차이는 재기록 용어 (즉, 룰은 임의의 상황에 따라 일어날 것이다 를 유도는 재기록 C를 [ L σ ] → C [ R의 σ ] 임의의 상황에 대한 C [ . ] 및 치환 σ( l , r )기음[ l σ] → C[ r σ]기음[ . ]σ), Haskell, OCaml 또는 Scala와 같은 현대 언어의 패턴 일치는 용어의 맨 위에 '쓰기'만 제공합니다. 제이의 패턴 미적분학에서도이 제한이 부과된다고 생각합니다. 이 제한의 의미를 설명하겠습니다. OCaml, Haskell, Scala sense에서 패턴 일치를 사용하면 다음과 같은 것을 말할 수 없습니다.
match M with
| C[ x :: _ ] -> printf "%i ...\n" x
| C[ [] ] -> printf "[]"
C[.]
여기 가 무엇입니까 ? 그것은 하나의 홀드 컨텍스트에 걸쳐있는 변수이어야합니다. 그러나 OCaml, Haskell 또는 Scala와 같은 언어는 프로그래머에게 임의 (단일 홀드) 컨텍스트 범위의 변수를 제공하지 않고 값 범위의 변수 만 제공합니다. 즉, 이러한 언어에서는 용어의 임의 위치에서 패턴 일치를 수행 할 수 없습니다. 패턴의 루트에서 관심있는 부분까지의 경로를 항상 지정해야합니다.이 제한을 적용한 주요 이유는 패턴 일치가 결정적이지 않기 때문입니다. 용어가 패턴과 일치 할 수 있기 때문입니다. 한 가지 이상의 방법. 예를 들어, 용어 (true, [9,7,4], "hello", 7)
는
그러한 문맥에 대해 범위가 C[7]
있다고 가정 할 때 두 가지 방식으로 패턴과 일치 C[.]
합니다.