2011-01-29 2 views
9

Я хочу использовать вложенные списки вложенности 2 для представления матрицы (например, [[1,2,3],[4,5,6]]). Как определить функцию, обрабатывающую небольшие подматрицы (скажем, 2 * 2)? Я ожидал чего-то вроде этого: f (a1:a2:a) : (b1:b2:b) : x = ... Где a1, a2 - два последовательных элемента первой строки и b1, b2 - вторая строка. a, b - остатки первого и второго ряда соответственно. x - остальные строки матрицы.Соответствие шаблону вложенного списка в Haskell

Но это явно не работает.

Заранее благодарен!

+0

Каким образом это не работает? Нам нужно больше деталей, чтобы помочь. –

+0

@Paul Johnson благодарит, но ответ уже дан. –

+2

Если у вас есть фиксированное количество элементов, используйте кортежи. Если это не исправлено, не используйте код для определенного количества элементов. – delnan

ответ

16

Я ожидал что-то вроде этого: f (a1:a2:a) : (b1:b2:b) : x = ...

Вы получили правильную идею. Все, что вам не хватает пара скобок:

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

Не забывайте, что вы можете просто использовать немного из where синтаксиса

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

Стоит отметить, однако, что сопоставление с образцом дает Вам выгода от падения до следующего определения функции, если шаблон не соответствует. Чтобы сделать эту версию where, это потребует больше внимания и защиты.

Смежные вопросы