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)

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)
juan_gandhi: (Default)
Джавасприпт, Хаскель и Скала, и, говорят, OCaml, из-за своей компактности, канают в качестве скриптовых языков.

Питон в этом смысле тоже ничо, но там, во-первых, споткнуться можно много где, во-вторых, на уровне компиляции нам ничего не скажут. Это уже на продакшене ебанется. То-то квора, которая на питоне, деплоится по сто раз в час (а тесты потом гоняют, и кодревью тоже). 
juan_gandhi: (Default)
...for running linear algebra stuff on gpu?

github.com/deeplearning4j/nd4j - for Java
github.com/deeplearning4j/nd4s - for Scala

Judging by the title, got a feeling that yes.
juan_gandhi: (Default)
        val counts = ((0 until 3 map (_ -> 0) toMap) /: (0 until something.length.toInt)) {
          case (c, i) => {
            val k = something.at8(i).toInt
            val v = c(k) + 1
            c + (k -> v)

Just counting. It's a piece of a test, so...
juan_gandhi: (Default)
einführen language.ukrainian

об'єкт  Прикладення

  визначити головне(аргументи: массив стрічок): Пусте =
     надрукувати "Привіт, світ" 

juan_gandhi: (Default)
завелся новый член, Хуй Ли.

Мне нравится. 
juan_gandhi: (Default)
Turned out all the delays were caused by two things:
- reading the files in parallel, as opposed to sequential (don't ask, will investigate)
- parallel output to stdout, instead of linearising the output. That was obviously my mistake, have to group the data, not mix them.

Now it's still 3 times faster than FP version. Got a suspicion that in JVM method dispatch is much heavier than plain if/else. It should be. But it's the staple of FP, never use booleans or ifs, but dispatch by the type. So, well... have to investigate.
juan_gandhi: (Default)
    // Set name from main class if not given
    name = Option(name).orElse(Option(mainClass)).orNull
    if (name == null && primaryResource != null) {
      name = Utils.stripDirectory(primaryResource)

Just a chunk of their funny shitty code.

FYI, var name: String = null

I'd rewrite all that crap, but it's not only code, I'm afraid. It's the whole Spark world that needs a doctor.
juan_gandhi: (VP)
case class a(i:Int)
  override def canEqual(a: Any) = a.isInstanceOf[a]

  override def equals(o:Any) = AnyRef.equals(o)

  override def hashCode = AnyRef.hashCode

val aa = new a(1)
aa == aa //false
juan_gandhi: (VP)
You know the difference in Scala between val f: A=>B and def f(a:A): B?

I do.

The first one is a point in BA; the second one is an arrow from A to B. Yes, there's an adjunction, so there's a 1-1 correspondence, thanks to Yoneda lemma; it's basically a special case of currying.
juan_gandhi: (VP)
Categories for Scala Programmers

Pretty primitive, but well, the target audience... just to dispel some myths and clear the people's conscience.


juan_gandhi: (Default)

June 2017

     1 2 3
4 5 67 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 2324


RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 24th, 2017 08:43 am
Powered by Dreamwidth Studios