« Return to Thread: [scala] vector math parameterized class in scala

Re: [scala] vector math parameterized class in scala

by Jorge Ortiz-3 :: Rate this Message:

Reply to Author | View in Thread

Or look at Scalala, which is doing just that (pimping MTJ).

http://www.scalanlp.org/wiki/index.php?title=Scalala

--j

On Tue, Jul 7, 2009 at 8:55 PM, Steve Lianoglou <mailinglist.honeypot@...> wrote:
But I wouldn't recommend this approach (yet) if you're looking to do high-performance numerical computing...

And if you do want to do high performance numerical computing, perhaps you might consider "pimping" one of the colt, MTJ, or jblas libraries to make them more scala-esque(?).

-steve



--j

On Tue, Jul 7, 2009 at 6:57 PM, Kevin Wright <kev.lee.wright@...> wrote:
You've also missed out on case classes and type inference, although this isn't causing your problem...

Using view bounds with the implicit conversions in Numeric should do the trick!

case class Vec3[T <:% Numeric] (x: T, y: T, z: T) {
 def + (o: Vec3[T]) = new Vec3(x + o.x, y + o.y, z + o.z)
 def * (s: T): Vec3[T] = new Vec3(x * s, y * s, z * s)
 def len = x + y + z
 def == (o: Vec3[T]) = x == o.x && y == o.y && z == o.z
 def < (o: Vec3[T]) = x < o.x && y < o.y && z < o.z
}

On Tue, Jul 7, 2009 at 11:59 PM, Jorge Ortiz <jorge.ortiz@...> wrote:
Take a look at Scala 2.8's Numeric trait:

http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/Numeric.scala

--j


On Tue, Jul 7, 2009 at 5:56 PM, Jonathan Bachrach <jrb@...> wrote:
i see.  that's unfortunate.  how would you recommend writing a vector math parameterized class in scala then (short of actually copying the code)?


On Jul 7, 2009, at 3:50 PM, Marcelo Fukushima wrote:

i think the problem is that Number does not define '+' and '*' methods
- and all the compiler knows about your T is that its a Number
(java.lang.Number)


On Tue, Jul 7, 2009 at 7:40 PM, Jonathan Bachrach<jrb@...> wrote:
i'm trying to define a vector math class using parameterized classes in
scala and am having trouble.  here's an abbreviated version of what i wrote:
class Vec3[T <: Number] (xa: T, ya: T, za: T) {
 val x: T = xa; val y: T = ya; val z: T = za
 def + (o: Vec3[T]): Vec3[T] = new Vec3(x + o.x, y + o.y, z + o.z)
 def * (s: T): Vec3[T] = new Vec3(x * s, y * s, z * s)
 def len (): T = x + y + z
 def == (o: Vec3[T]): Boolean = x == o.x && y == o.y && z == o.z
 def < (o: Vec3[T]): Boolean = x < o.x && y < o.y && z < o.z
}
and here's what scalac says:
rala-692> scalac vec3.scala
vec3.scala:3: error: type mismatch;
 found   : T
 required: String
 def + (o: Vec3[T]): Vec3[T] = new Vec3(x + o.x, y + o.y, z + o.z)
                                             ^
vec3.scala:3: error: type mismatch;
 found   : T
 required: String
 def + (o: Vec3[T]): Vec3[T] = new Vec3(x + o.x, y + o.y, z + o.z)
                                                      ^
vec3.scala:3: error: type mismatch;
 found   : T
 required: String
 def + (o: Vec3[T]): Vec3[T] = new Vec3(x + o.x, y + o.y, z + o.z)
                                                               ^
vec3.scala:4: error: value * is not a member of T
 def * (s: T): Vec3[T] = new Vec3(x * s, y * s, z * s)
                                   ^
vec3.scala:4: error: value * is not a member of T
 def * (s: T): Vec3[T] = new Vec3(x * s, y * s, z * s)
                                          ^
vec3.scala:4: error: value * is not a member of T
 def * (s: T): Vec3[T] = new Vec3(x * s, y * s, z * s)
                                                 ^
vec3.scala:5: error: type mismatch;
 found   : T
 required: String
 def len (): T = x + y + z
                    ^
vec3.scala:7: error: value < is not a member of T
 def < (o: Vec3[T]): Boolean = x < o.x && y < o.y && z < o.z
                                ^
8 errors found
i had added the T <: Number to try to make it so that the + would be
compatible but it still thinks + only works with strings.  i'm not even
completely sure that Number is a real Scala Class.  i'm obviously not
understanding how to write parameterized classes in scala.  any help would
be appreciated.




--
http://mapsdev.blogspot.com/
Marcelo Takeshi Fukushima


 « Return to Thread: [scala] vector math parameterized class in scala