2011-01-29 20 views
9

Quiero usar listas anidadas de jerarquización 2 para representar la matriz (por ejemplo, [[1,2,3],[4,5,6]]). ¿Cómo definiría una función que procese submatrices pequeñas (digamos 2 * 2)? Esperaba algo como esto: f (a1:a2:a) : (b1:b2:b) : x = ... Donde a1, a2 son dos elementos consecutivos de la primera fila y b1, b2 - segunda fila. a, b son los restos de la primera y la segunda fila correspondientemente. x es el resto de las filas de la matriz.Coincidencia de patrones de la lista anidada en Haskell

Pero esto claramente no funciona.

¡Gracias de antemano!

+0

¿De qué manera no funciona? Necesitamos más detalles para ayudar. –

+0

@Paul Johnson, gracias, pero la respuesta ya está dada. –

+2

Si tiene un número fijo de elementos, use tuplas. Si no es fijo, no codifique contra un número específico de elementos. – delnan

Respuesta

16

me esperaba algo como esto: f (a1:a2:a) : (b1:b2:b) : x = ...

Usted tiene la idea correcta. Todo lo que se está perdiendo es un par de paréntesis:

f ((a1:a2:a) : (b1:b2:b) : x) = ... 
1

No se olvide que sólo puede utilizar un poco de sintaxis where

f xs = ... 
    where (a1:a2:a) = head xs 
      (b1:b2:b) = head (tail xs) 
      x   = tail (tail xs) 

Vale la pena señalar, sin embargo, que la coincidencia de patrones que da la beneficio de caer a la siguiente definición de la función si el patrón no coincide. Tomaría más guardias y cosas para hacer que esta versión where haga eso.

Cuestiones relacionadas