Articulo de referencia

Cálculo de patrones

El cálculo de patrones basa toda la computación en la coincidencia de patrones de un tipo muy general. Al igual que el cálculo lambda , admite un tratamiento uniforme de la eval...

El cálculo de patrones basa toda la computación en la coincidencia de patrones de un tipo muy general. Al igual que el cálculo lambda , admite un tratamiento uniforme de la evaluación de funciones . Además, permite que las funciones se pasen como argumentos y se devuelvan como resultados. Adicionalmente, el cálculo de patrones admite el acceso uniforme a la estructura interna de los argumentos, ya sean pares, listas o árboles . También permite que los patrones se pasen como argumentos y se devuelvan como resultados. El acceso uniforme se ilustra mediante una función de coincidencia de patrones que calcula el tamaño de una estructura de datossize arbitraria . En la notación del lenguaje de programación bondi , se da por la función recursiva

sea ​​tamaño_registro = | x y -> ( tamaño x ) + ( tamaño y ) | x - > 1

El segundo caso, o predeterminado,x -> 1 compara el patrón x con el argumento y devuelve 1. Este caso se usa solo si la coincidencia falló en el primer caso. El primer caso, o especial, compara con cualquier compuesto , como una lista no vacía o un par. La coincidencia vincula xal componente izquierdo y yal componente derecho. Luego, el cuerpo del caso suma los tamaños de estos componentes.

Técnicas similares generan consultas genéricas para búsqueda y actualización. La combinación de recursión y descomposición de esta manera produce polimorfismo de rutas .

La capacidad de pasar patrones como parámetros ( polimorfismo de patrones ) se ilustra definiendo un eliminador genérico. Supongamos que se dan constructores Leafpara crear las hojas de un árbol y Countpara convertir números en contadores. Los eliminadores correspondientes son entonces

eliminarHoja = | Hoja y -> y eliminarConteo = | Conteo y -> y

Por ejemplo, elimLeaf (Leaf 3)se evalúa 3como lo hace elimCount (Count 3).

Estos ejemplos se pueden producir aplicando el eliminador genérico elima los constructores en cuestión. Se define por

eliminar = | x -> | { y } x y -> y

Ahora elim Leafse evalúa como | {y} Leaf y -> ylo cual es equivalente a elimLeaf. También elim Countes equivalente a elimCount.

En general, las llaves {}contienen las variables ligadas del patrón, de modo que xes libre y yestá ligada en | {y} x y -> y.

  • Copia de archivo de los enlaces que aparecen a continuación (que ya no están disponibles en línea).
  • Jay, C. Barry (noviembre de 2004). "El cálculo de patrones" . ACM Trans. Program. Lang. Syst . 26 (6): 911– 937. doi : 10.1145/1034774.1034775 . S2CID 14252624 . — el documento original, pero no el más general.
  • Jay, B.; Kesner, D. (2006). "Cálculo de patrones puros". En Sestoft, P. (ed.). Lenguajes y sistemas de programación. ESOP 2006. Lecture Notes in Computer Science. Vol.  3924. Springer. pp. 100–114 . doi : 10.1007/11693024_8 . hdl : 10453/1684 . ISBN  978-3-540-33096-7.
  • Jay, Barry (2009). Cálculo de patrones: Computación con funciones y estructuras . Springer. doi : 10.1007/978-3-540-89185-7 . ISBN 978-3-540-89185-7.
  • Sitio de investigación del lenguaje de programación Bondi
  • Given-Wilson, T.; Gorla, D.; Jay, B. (2010). "Cálculo de patrones concurrentes". En Calude, CS; Sassone, V. (eds.). Informática teórica. TCS 2010. IFIP Advances in Information and Communication Technology. Vol.  323. Springer. doi : 10.1007/978-3-642-15240-5_18 . ISBN 978-3-642-15240-5.