2013-05-06 15 views
6

Я подумал, что это должно быть прямо вперед:Sum или продукт Rationals с Spire (как получить scala.Numeric)

Я думаю, это просто вопрос приведения правильного материала в неявную область. Но что мне импортировать?

Я могу видеть, что для того, чтобы получить RationalIsNumeric, я должен сделать что-то вроде этого:

import spire.math.Numeric._ 
implicit val err = new ApproximationContext(Rational(1, 192)) 
implicit val num = RationalIsNumeric 

Но это просто дает мне spire.math.Numeric. Поэтому я стараюсь с этим дополнительно:

import spire.math.compat._ 

Но не повезло ...

+0

OT: для чего вы используете шпиль? – Edmondo1984

+1

Я занимаюсь ритмическими (музыкальными) вычислениями. Музыкальные продолжительности обычно выражаются как рациональные, поэтому вы должны уметь их калечить :) Например. учитывая ритмическую ячейку с относительной продолжительностью 3, 2, 1 и общую длительность 1/2, вычисляют индивидуальные продолжительности, находят некоторые растягивающие факторы, которые приводят к малым знаменателям и т. д. –

ответ

8

Все, что нужно, это свидетельство spire.math.compat.numeric[Rational]:

import spire.math._ 

val seq = Vector(Rational(1, 4), Rational(3, 4)) 
implicit val num = compat.numeric[Rational] // ! 
seq.sum  // --> 1/1 
seq.product // --> 3/16 
6

Стоит также отметить, что Spire предоставляет свои собственные версии sum и product, что он называет qsum и qproduct:

import spire.implicits._ 
import spire.math._ 

Vector(Rational(1,3), Rational(1,2)).qsum // 5/6 

Spire префикс всех методов его сбора с помощью q, чтобы избежать противоречий с встроенными методами Scala. Вот (возможно неполный) список:

  • qsum
  • qproduct
  • qnorm
  • qmin
  • qmax
  • qmean
  • qsorted
  • qsortedBy
  • qsortedWith
  • qselected
  • qshuffled
  • qsampled
  • qchoose

К сожалению, я пришел немного поздно к этому, я новичок в StackOverflow.

Смежные вопросы