Salah satu cara untuk melihat kedua konsep ini adalah dengan mengatakan bahwa pencocokan pola adalah fitur bahasa pemrograman untuk menggabungkan diskriminasi pada konstruktor dan istilah yang merusak (sementara pada saat yang sama memilih dan menamai fragmen istilah) secara aman, kompak dan efisien. Penelitian tentang pencocokan pola biasanya berfokus pada efisiensi implementasi, misalnya tentang cara meminimalkan jumlah perbandingan yang harus dilakukan mekanisme pencocokan.
Sebaliknya, penulisan ulang istilah adalah model umum perhitungan yang menyelidiki berbagai metode (berpotensi non-deterministik) untuk mengganti subterms ekspresi sintaksis (lebih tepatnya elemen istilah-aljabar atas beberapa set variabel) dengan istilah lain. Penelitian tentang sistem penulisan ulang istilah biasanya tentang sifat-sifat abstrak dari sistem penulisan ulang seperti pertemuan, determinisme dan penghentian, dan lebih khusus tentang bagaimana sifat-sifat seperti itu atau tidak dipertahankan oleh operasi aljabar pada sistem penulisan ulang, yaitu sejauh mana sifat-sifat ini bersifat komposisional.
(l,r)C[lσ]→C[rσ]C[.]σ), sementara pencocokan pola dalam bahasa modern seperti Haskell, OCaml atau Scala hanya menyediakan untuk menulis ulang 'di bagian atas' dari suatu istilah. Batasan ini juga, saya pikir, dikenakan dalam kalkulus pola Jay. Izinkan saya menjelaskan apa yang saya maksud dengan pembatasan ini. Dengan pencocokan pola di OCaml, Haskell, Scala sense, Anda tidak bisa mengatakan sesuatu seperti
match M with
| C[ x :: _ ] -> printf "%i ...\n" x
| C[ [] ] -> printf "[]"
Ada apa C[.]
disini Itu seharusnya menjadi variabel yang berkisar pada konteks satu-holed. Tetapi bahasa seperti OCaml, Haskell atau Scala tidak memberikan variabel pemrogram yang berkisar pada konteks arbitrer (satu-holed), hanya variabel yang berkisar pada nilai. Dengan kata lain, dalam bahasa seperti itu Anda tidak dapat mencocokkan pola pada posisi sewenang-wenang dalam suatu istilah. Anda selalu harus menentukan jalur dari akar pola ke bagian yang Anda minati. Saya kira alasan utama untuk memaksakan pembatasan ini adalah bahwa jika pencocokan pola akan menjadi non-deterministik, karena istilah mungkin cocok dengan pola di lebih dari satu cara. Misalnya istilah tersebut (true, [9,7,4], "hello", 7)
cocok dengan pola C[7]
dalam dua cara, dengan asumsi C[.]
berkisar pada konteks seperti itu.