juan_gandhi: (Default)
2017-12-06 09:11 am

just discovered an obvious trick


class Hyperplane extends VectorSpace({
require(dim > 0, "0-dimensional space does not have a hyperplane")
dim-1
}) {...
juan_gandhi: (Default)
2017-11-12 06:07 pm
Entry tags:

scala specialized...

twice slower than Java on arrays. 
juan_gandhi: (Default)
2017-11-09 01:19 pm
Entry tags:

se sarete in Roma nel mese di dicembre

Lambda Roma dicembre 18

Voglio parlare di funettori e monadi ai romani.
juan_gandhi: (Default)
2017-10-16 07:37 pm
Entry tags:

an obvious thing

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
juan_gandhi: (Default)
2017-09-27 06:27 pm
Entry tags:

пра манады

https://markkarpov.com/post/free-monad-considered-harmful.html 

Свободные - плохо. (Ну типа почти всегда.)

И про нативные типы в Скале (плагин нужен)

https://github.com/alexknvl/newtypes
juan_gandhi: (Default)
2017-09-22 02:48 pm
Entry tags:

wtf

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

juan_gandhi: (Default)
2017-08-28 10:10 am
Entry tags:

crazy jvm logic

Double.NaN shouldBe Double.NaN



org.scalatest.exceptions.TesetFailedException: NaN was not equal to NaN
juan_gandhi: (Default)
2017-08-21 04:40 pm
Entry tags:

finding...

finding a bug in scala.util.Random - priceless
juan_gandhi: (Default)
2017-07-11 02:03 pm
Entry tags:

а вот еще обнаружил

Вычисляю, скажем, норму вектора; а там такой TraversableOnce, и он такой, перед тем как начать суммировать, проверяет, уж не пустая ли коллекция; а народная проверка на пустоту, как это принято на джавных языках, состоит в том, чтобы посчитать длину и удостовериться, что оная больше нуля. Ну казалось бы, нахер тебе длина. Ну и т.д. 

Да даже если просто hasNext() чекать, и то, инстанциируется итератор, а для этого нужно фильтровать базар, например, ну и т.д.

Это я вбрасываю реализма. Написал, например, Foldable на джаве, чтобы "ускорить процесс". В три раза, например, на длинных векторах.

Короче, сильные типы важны, но под покровом типов надо как-то хотя бы от боксинга избавиться.
juan_gandhi: (Default)
2017-06-18 03:33 pm

so this is how it looks now

def matrix(h: VectorSpace, w: VectorSpace, values: Double*): Matrix[w.type, h.type] = {
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
}
The method is in a test, generates matrix from values.



juan_gandhi: (Default)
2017-06-11 01:51 pm

problems with path-dependent types

There seems to be no way to use path-dependent types in a recursive context. Even we pass a type as a type argument, as soon as you introduce a constraint, kaboom, your constraint is used literally. 
juan_gandhi: (Default)
2017-06-09 06:04 pm
Entry tags:

playing with Scala

  type voidness = {}
  val nothing: voidness = new {}
juan_gandhi: (Default)
2017-06-08 05:58 pm

в процессе бытия

Ну да, я пишу на скале. Но мечтал впендюрить в тип вектора его размер (размерность, по-нашему). Ну скала, не идрис же. Типы-то независимые.

Ан нет, это скала! Впендюрил. Всандалил класс VectorSpace (is it better if I call it LinearSpace? who fucking cares...); и в нем уже вектор. Проверять совместимость при сложении не надо, ну и все такое. К матрице присобачил два свойства - домен (одно пространство) и кодомен (другое пространство). И все заебись! Беру row - оно уже нужного типа и нужной длины, по дефолту, блин! Типы стали зависимы.

А если я так напишу class NormedLinearSpace extends VectorSpace with Norm (норма - у меня уже есть такой класс).

Классно же, а. Кстати, и вопросы перформенса легче решаются. Что-то у меня тайпклассы не пошли в этот раз.

juan_gandhi: (Default)
2017-05-22 10:33 am
Entry tags:

strangely categorical construct I needed

  private def diagonalize[T](f: Int => T): PartialFunction[(Int, Int), T] =
      { case (i, j) if i == j => f(i) }
juan_gandhi: (Default)
2017-05-21 12:50 pm
Entry tags:

so what if matrices are represented functionally

  def Unit(size: Int) = new Matrix.OnFunction(size, size, (i, j) => if (i == j) 1.0 else 0.0)