juan_gandhi: (Default)

class Hyperplane extends VectorSpace({
require(dim > 0, "0-dimensional space does not have a hyperplane")
dim-1
}) {...
juan_gandhi: (Default)
twice slower than Java on arrays. 
juan_gandhi: (Default)
Lambda Roma dicembre 18

Voglio parlare di funettori e monadi ai romani.
juan_gandhi: (Default)
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)
https://markkarpov.com/post/free-monad-considered-harmful.html 

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

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

https://github.com/alexknvl/newtypes

wtf

Sep. 22nd, 2017 02:48 pm
juan_gandhi: (Default)
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)
Double.NaN shouldBe Double.NaN



org.scalatest.exceptions.TesetFailedException: NaN was not equal to NaN

finding...

Aug. 21st, 2017 04:40 pm
juan_gandhi: (Default)
finding a bug in scala.util.Random - priceless
juan_gandhi: (Default)
Вычисляю, скажем, норму вектора; а там такой TraversableOnce, и он такой, перед тем как начать суммировать, проверяет, уж не пустая ли коллекция; а народная проверка на пустоту, как это принято на джавных языках, состоит в том, чтобы посчитать длину и удостовериться, что оная больше нуля. Ну казалось бы, нахер тебе длина. Ну и т.д. 

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

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

Короче, сильные типы важны, но под покровом типов надо как-то хотя бы от боксинга избавиться.
juan_gandhi: (Default)
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)
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)
  type voidness = {}
  val nothing: voidness = new {}
juan_gandhi: (Default)
Ну да, я пишу на скале. Но мечтал впендюрить в тип вектора его размер (размерность, по-нашему). Ну скала, не идрис же. Типы-то независимые.

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

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

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

juan_gandhi: (Default)
  private def diagonalize[T](f: Int => T): PartialFunction[(Int, Int), T] =
      { case (i, j) if i == j => f(i) }
juan_gandhi: (Default)
  def Unit(size: Int) = new Matrix.OnFunction(size, size, (i, j) => if (i == j) 1.0 else 0.0)

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

September 2025

S M T W T F S
 1 2345 6
78 910111213
14151617181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 9th, 2025 05:59 pm
Powered by Dreamwidth Studios