Entry tags:
just discovered an obvious trick
class Hyperplane extends VectorSpace({
require(dim > 0, "0-dimensional space does not have a hyperplane")
dim-1
}) {...
class Hyperplane extends VectorSpace({
require(dim > 0, "0-dimensional space does not have a hyperplane")
dim-1
}) {...
scala> implicit def const[T](x: => T): Any => T = _ => x const: [T](x: => T)Any => T scala> def dome(y: Int => String) = y(42) dome: (y: Int => String)String scala> dome(_ + "xxx") res1: String = 42xxx scala> dome("do me") res2: String = do me
scala> new java.util.Date(Long.MinValue) res1: java.util.Date = Sun Dec 02 08:47:04 PST 292269055 scala> new java.util.Date(Long.MaxValue) res2: java.util.Date = Sat Aug 16 23:12:55 PST 292278994 scala> new java.util.Date(Long.MinValue >> 16) res14: java.util.Date = Thu Apr 06 13:14:04 PST 2491
Double.NaN shouldBe Double.NaN
org.scalatest.exceptions.TesetFailedException: NaN was not equal to NaN
def matrix(h: VectorSpace, w: VectorSpace, values: Double*): Matrix[w.type, h.type] = {The method is in a test, generates matrix from values.
val m = Matrix(w, h)
for {
i <- 0 until h.dim
j <- 0 until w.dim
} m(i, j) = values(i*w.dim+j)
m
}
Ан нет, это скала! Впендюрил. Всандалил класс VectorSpace (is it better if I call it LinearSpace? who fucking cares...); и в нем уже вектор. Проверять совместимость при сложении не надо, ну и все такое. К матрице присобачил два свойства - домен (одно пространство) и кодомен (другое пространство). И все заебись! Беру row - оно уже нужного типа и нужной длины, по дефолту, блин! Типы стали зависимы.
А если я так напишу class NormedLinearSpace extends VectorSpace with Norm
(норма - у меня уже есть такой класс).
Классно же, а. Кстати, и вопросы перформенса легче решаются. Что-то у меня тайпклассы не пошли в этот раз.