【发布时间】:2013-10-08 21:00:25
【问题描述】:
我尝试使用数学框架 spire,但出现错误消息:
import spire.algebra._
import spire.implicits._
trait AbGroup[A] extends Group[A]
final class Rationnel_Quadratique(val n1: Int = 2)(val coef: (Int, Int)) {
override def toString = {
coef match {
case (c, i) =>
s"$c + $i√$n"
}
}
def a() = coef._1
def b() = coef._2
def n() = n1
}
object Rationnel_Quadratique {
def apply(coef: (Int, Int),n: Int = 2)= {
new Rationnel_Quadratique(n)(coef)
}
}
object AbGroup {
implicit object RQAbGroup extends AbGroup[Rationnel_Quadratique] {
def +(a: Rationnel_Quadratique, b: Rationnel_Quadratique): Rationnel_Quadratique = Rationnel_Quadratique(coef=(a.a() + b.a(), a.b() + b.b()))
def inverse(a: Rationnel_Quadratique): Rationnel_Quadratique = Rationnel_Quadratique((-a.a(), -a.b()))
def id: Rationnel_Quadratique = Rationnel_Quadratique((0, 0))
}
}
object euler66_2 extends App {
val c = Rationnel_Quadratique((1, 2))
val d = Rationnel_Quadratique((3, 4))
val e = c + d
println(e)
}
程序预计会添加1+2√2和3+4√2,但我却出现了这个错误:
找不到 spire.algebra.AdditiveSemigroup[Rationnel_Quadratique] 类型的证据参数的隐含值 val e = c + d ^
我认为我错过了一些重要的东西(隐式的使用?)
【问题讨论】:
-
在
object euler66_2方法中尝试import AbGroup._。 -
你好,它不会改变任何东西
-
在这种情况下,尝试将 RQAbGroup 设为 AbGroup[Rationnel_Quadratique] 类型的 val。
-
我试过这个:val groupe=AbGroup.RQAbGroup val c = Rationnel_Quadratique((1, 2)) val d = Rationnel_Quadratique((3, 4)) val e = c + d,我确定问题来自于 Rationnel_Quadratique 值没有链接到一个组。但我不是很擅长隐式,我会尝试获取一些关于这个的教程。