tecnicas pattern patrones matematicos matematicas ejemplos busqueda haskell pattern-matching record algebraic-data-types

pattern - Haskell registro de patrones de coincidencia



pattern matching javascript (1)

Puedes usar patrones de grabación como este:

data X = A | B {name :: String} | C {x::Int, y::Int, name::String} myfn :: X -> Int myfn A = 50 myfn B{} = 200 myfn C{} = 500

Los patrones de registro le permiten dar nombres a los campos de los constructores. También puedes hacer cosas como:

myfn C{name=n} = length n

para que pueda ver que puede hacer coincidencias de patrones solo en el campo específico que necesita.

Nota: puede usar el patrón de registro vacío incluso con tipos de datos que no usan la sintaxis de registro:

data A = A Int | B Int Int myfn A{} = 1 myfn B{} = 2

Esto esta bien. Hay una serie de otras extensiones relacionadas con los patrones de registro:

  • RecordWildCards permite escribir cosas como C{..} que es equivalente al patrón: C{x=x, y=y, name=name} , es decir, coincide con todos los campos y ahora tiene un alcance x con el valor coincidente para el campo x etc.

  • NamedFieldPuns permite escribir C{name} para que sea equivalente a C{name=name} , por lo que ese name está ahora dentro del alcance y contiene el valor que coincide con el campo del name .

Tenga en cuenta que el uso de patrones de registro no le impide utilizar sus constructores de forma posicional, por lo que aún puede escribir:

myfn (B _) = 200

Sólo añade funcionalidad.

Estoy buscando una manera de simplificar los patrones de función cuando no se requieren los datos reales:

data X = A | B String | C Int Int String myfn :: X -> Int myfn A = 50 myfn (B _) = 200 myfn (C _ _ _) = 500

¿Hay una manera de hacer un patrón más simple para hacer coincidir C, simplemente descartando los valores?

hsdev agrega una sugerencia "Sugerencia: utilice patrones de registro", pero Google no me ayudó allí.