m2ym / optima

Optimized Pattern Matching Library for Common Lisp
271 stars 19 forks source link

Support matching of multi-dimensional arrays #59

Open fare opened 12 years ago

fare commented 12 years ago

To supersede cl-match, we need to be able to match arrays of arbitrary dimensions.

e.g. an array of rank 3:

(array 3 (((1 2) (3 4)) ((5 6) (6 8))))

same array using explicit dimensions:

(array (2 2 2) (((1 2) (3 4)) ((5 6) (6 8))))

same array using an array as a pattern:

(array #3(((1 2) (3 4)) ((5 6) (6 8))))

Oh, what about checking the specialized array type? Makes things even worse.

(array 2 double-float ((a b) (c d)))
guicho271828 commented 11 years ago

I have the similar idea.

It would be better if the matcher gives the somewhat similar interface to the constructor.

and I am thinking about this:

(array (5 5)
       ((_ _ _ _ _)
        ___________
        a-row
        ___________
        (a _____ b)))
(array (101 101)
       ((_ (column 99) _)
        (column 49)
        a
        (column 49)
        (_ _ _ _ _)))
guicho271828 commented 11 years ago

if it doesn't accept an execute-time value, something like 49 might be a choice.

guicho271828 commented 11 years ago

__49__

guicho271828 commented 8 years ago

This is addressed in Trivia, in combination with inline patterns. https://github.com/guicho271828/trivia/blob/master/level2/arrays.lisp