Skip to content

Instantly share code, notes, and snippets.

import scala.language.implicitConversions
// R is derived from Rational with some fixes.
// https://sites.google.com/site/scalajp/home/documentation/scala-by-example/chapter6
case class R(n: Int, d: Int) extends Ordered[R] {
private def gcd(x: Int, y: Int): Int = {
if (x == 0) y
else if (x < 0) gcd(-x, y)
else if (y < 0) -gcd( x, -y)
sealed trait Expr
case class N(n: Rational) extends Expr
case class Rational(n: Int = 1, d: Int = 1) extends Expr {
private def gcd(x: Int, y: Int): Int = {
if (x == 0) y
else if (x < 0) gcd(-x, y)
else if (y < 0) -gcd(x, -y)
else gcd(y % x, x)
}
private val g = gcd(n, d)
[info] Loading project definition from /home/shigemk2/projects/github.com/fpinscala/fpinscala/project
[info] Set current project to fpinscala (in build file:/home/shigemk2/projects/github.com/fpinscala/fpinscala/)
>  (reverse-i-search)`':  (reverse-i-search)`a': answers/console (reverse-i-search)`an': answers/console (reverse-i-search)`anw':  >
> answers/console
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.11.5 (OpenJDK 64-Bit Server VM, Java 1.7.0_79).
Type in expressions to have them evaluated.
Type :help for more information.
class Rational(n: Int = 1, d: Int = 1) {
private def gcd(x: Int, y: Int): Int = {
if (x == 0) y
else if (x < 0) gcd(-x, y)
else if (y < 0) -gcd(x, -y)
else gcd(y % x, x)
}
private val g = gcd(n, d)
val numer: Int = n/g
val denom: Int = d/g
@shigemk2
shigemk2 / diff.txt
Created July 12, 2015 07:28
代数計算 diff
diff --git a/AlgebraCalculation.scala b/AlgebraCalculation.scala
index 691cca8..851311d 100644
--- a/AlgebraCalculation.scala
+++ b/AlgebraCalculation.scala
@@ -121,7 +121,7 @@ def expand(xs: Expr): Expr = xs match {
case List(x) => List(expand(x))
case (x::y::xs) => multiply(x,y) :: xs
}
- Mul(f(xs.toList): _*)
+ mul(f(xs.toList))
sealed trait Expr
case class N(n: Int) extends Expr
case class Var(x: String, a: Int, n: Int) extends Expr
case class Add(n: Expr*) extends Expr
case class Mul(n: Expr*) extends Expr
def x(a: Int, n: Int): Var = {
Var("x", a, n)
}
sealed trait Expr
case class N(n: Int) extends Expr
case class Var(x: String, a: Int, n: Int) extends Expr
case class Add(n: Expr*) extends Expr
case class Mul(n: Expr*) extends Expr
def x(a: Int, n: Int): Var = {
Var("x", a, n)
}
sealed trait Expr
case class N(n: Int) extends Expr
case class Var(x: String, a: Int, n: Int) extends Expr
case class Add(n: Expr*) extends Expr
case class Mul(n: Expr*) extends Expr
def add(xs: List[Expr]): Expr = xs match {
case List() => N(0)
case List(xs) => xs
case xs => Add(xs: _*) // Add(List(N(1), N(2), Var(x,2,2)))
@shigemk2
shigemk2 / AlgebraCalculation.scala
Created July 11, 2015 13:11
Scala代数計算 一段階
sealed trait Expr
case class N(n: Int) extends Expr
case class Var(x: String, a: Int, n: Int) extends Expr
case class Add(n: Expr*) extends Expr
case class Mul(n: Expr*) extends Expr
def x(a: Int, n: Int): Var = {
Var("x", a, n)
}
@shigemk2
shigemk2 / AlgebraCalculation.scala
Created July 11, 2015 07:31
Scala代数計算 式の掛け算
sealed trait Expr
case class N(n: Int) extends Expr
case class Var(x: String, a: Int, n: Int) extends Expr
case class Add(n: Expr*) extends Expr
case class Mul(n: Expr*) extends Expr
def x(a: Int, n: Int): Var = {
Var("x", a, n)
}