[Haskell-cafe] Simple matrix
lisper at it.kth.se
Wed Jun 21 17:37:38 EDT 2006
Here is one way to do it. First, you have to interpret operations on
matrices as being elementwise applied. E.g, (*) is interpreted as zipWith
(zipWith (*)) rather than matrix multiply, and similar for (+) etc. You then
obtain a lazy semantics for the operations, where the extent of the
resulting matrix is the intersection of the extents of the argument
matrices. Second, you lift constants into infinite matrices containing the
constant, that is: fromInteger n = repeat (repeat n). Now your examples will
work as intended.
>And there is another problem: one could expect
>10 * [[1,2],[3,4]] to be equal to [[10,20],[30,40]]
>and in this case 10 should be equal to [[10,0],[0,10]], instead of
>[[10,10],[10,10]] or [].
>I dont see how to fix this.
>Could be better to forget about fromInteger...
>Jared Updike wrote:
>>> fromInteger x = [[fromInteger x]]
>> Wouldn't you want the expression
>> [[1,0],[0,2]] + 10
>> to yield
>> instead of [] ? I guess you would need some complicated machinery
>> so this is one thing you have to ignore to keep your otherwise nifty
>> instance nice and simple.
>Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. Registre seu aparelho agora!
>Haskell-Cafe mailing list
>Haskell-Cafe at haskell.org
More information about the Haskell-Cafe