commit 16b286da0bf758a09813fa08a5f1ee1ed1464e70 Author: jll Date: Sat Mar 4 11:55:59 2017 +0100 Initializes repo diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b101288 --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# Created by http://www.gitignore.io + +### Scala ### +*.class +*.log + +# sbt specific +.cache/ +.history/ +.lib/ +dist/* +target/ +lib_managed/ +src_managed/ +project/boot/ +project/plugins/project/ + +# Scala-IDE specific +.scala_dependencies +.worksheet + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# End of https://www.gitignore.io/api/intellij \ No newline at end of file diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..5ab2f8a --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Hello \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d5d79e0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fb539fa --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/root-build.iml b/.idea/modules/root-build.iml new file mode 100644 index 0000000..48e9ea7 --- /dev/null +++ b/.idea/modules/root-build.iml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/root.iml b/.idea/modules/root.iml new file mode 100644 index 0000000..e6fb4f8 --- /dev/null +++ b/.idea/modules/root.iml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/sbt.xml b/.idea/sbt.xml new file mode 100644 index 0000000..855ac17 --- /dev/null +++ b/.idea/sbt.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/.idea/scala_compiler.xml b/.idea/scala_compiler.xml new file mode 100644 index 0000000..643928d --- /dev/null +++ b/.idea/scala_compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..5815450 --- /dev/null +++ b/build.sbt @@ -0,0 +1,12 @@ +import Dependencies._ + +lazy val root = (project in file(".")). + settings( + inThisBuild(List( + organization := "com.example", + scalaVersion := "2.12.1", + version := "0.1.0-SNAPSHOT" + )), + name := "Hello", + libraryDependencies += scalaTest % Test + ) diff --git a/project/Dependencies.scala b/project/Dependencies.scala new file mode 100644 index 0000000..c11e0a2 --- /dev/null +++ b/project/Dependencies.scala @@ -0,0 +1,5 @@ +import sbt._ + +object Dependencies { + lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.0.1" +} diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..27e88aa --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.13 diff --git a/src/main/scala/example/Comparable.scala b/src/main/scala/example/Comparable.scala new file mode 100644 index 0000000..fe8a587 --- /dev/null +++ b/src/main/scala/example/Comparable.scala @@ -0,0 +1,44 @@ +package example + +/** + * Created by jll on 3/4/2017. + */ +trait Ord { + def < (that: Any): Boolean + def <=(that: Any): Boolean = (this < that) || (this == that) + def > (that: Any): Boolean = !(this <= that) + def >=(that: Any): Boolean = !(this < that) +} + +class Date(y: Int, m: Int, d: Int) extends Ord { + def year = y + def month = m + def day = d + override def toString(): String = year + "-" + month + "-" + day + + override def equals(that: Any): Boolean = + that.isInstanceOf[Date] && { + val o = that.asInstanceOf[Date] + o.day == day && o.month == month && o.year == year + } + + def <(that: Any): Boolean = { + if (!that.isInstanceOf[Date]) + sys.error("cannot compare " + that + " and a Date") + val o = that.asInstanceOf[Date] + (year < o.year) || + (year == o.year && (month < o.month || + (month == o.month && day < o.day))) + } +} + +object Thing2{ + def main(args: Array[String]){ + + var d = new Date(2016, 12, 31) + var d2 = new Date(2017, 11, 11) + + println(d2 > d) + + } +} \ No newline at end of file diff --git a/src/main/scala/example/ComplexNumbers.scala b/src/main/scala/example/ComplexNumbers.scala new file mode 100644 index 0000000..32d7d4b --- /dev/null +++ b/src/main/scala/example/ComplexNumbers.scala @@ -0,0 +1,19 @@ +package example + +/** + * Created by jll on 3/3/2017. + */ +object ComplexNumbers { + def main(args: Array[String]) { + val c = new Complex(1.2, 3.4) + println("imaginary part: " + c.im) + println(c) + } +} + +class Complex(real: Double, imaginary: Double) { + def re = real + def im = imaginary + override def toString() = + "" + re + (if (im < 0) "" else "+") + im + "i" +} \ No newline at end of file diff --git a/src/main/scala/example/Genericity.scala b/src/main/scala/example/Genericity.scala new file mode 100644 index 0000000..b5bff2c --- /dev/null +++ b/src/main/scala/example/Genericity.scala @@ -0,0 +1,18 @@ +package example + +/** + * Created by jll on 3/4/2017. + */ +object IntegerReference { + def main(args: Array[String]) { + val cell = new Reference[Int] + cell.set(13) + println("Reference contains the half of " + (cell.get * 2)) + } +} + +class Reference[T] { + private var contents: T = _ + def set(value: T) { contents = value } + def get: T = contents +} diff --git a/src/main/scala/example/Hello.scala b/src/main/scala/example/Hello.scala new file mode 100644 index 0000000..80ea40a --- /dev/null +++ b/src/main/scala/example/Hello.scala @@ -0,0 +1,9 @@ +package example + +object Hello extends Greeting with App { + println(greeting) +} + +trait Greeting { + lazy val greeting: String = "hello" +} diff --git a/src/main/scala/example/Timer.scala b/src/main/scala/example/Timer.scala new file mode 100644 index 0000000..126af3d --- /dev/null +++ b/src/main/scala/example/Timer.scala @@ -0,0 +1,14 @@ +package example + +/** + * Created by jll on 3/3/2017. + */ +object Timer { + def oncePerSecond(callback: () => Unit) { + while (true) { callback(); Thread sleep 1000 } + } + + def main(args: Array[String]) { + oncePerSecond(() => println("time flies like an arrow...")) + } +} \ No newline at end of file diff --git a/src/main/scala/example/Tree.scala b/src/main/scala/example/Tree.scala new file mode 100644 index 0000000..fc3aa0b --- /dev/null +++ b/src/main/scala/example/Tree.scala @@ -0,0 +1,34 @@ +package example + +/** + * Created by jll on 3/4/2017. + */ +abstract class Tree +case class Sum(l: Tree, r: Tree) extends Tree +case class Var(n: String) extends Tree +case class Const(v: Int) extends Tree + +object Thing { + type Environment = String => Int + + def eval(t: Tree, env: Environment): Int = t match { + case Sum(l, r) => eval(l, env) + eval(r, env) + case Var(n) => env(n) + case Const(v) => v + } + + def derive(t: Tree, v: String): Tree = t match { + case Sum(l, r) => Sum(derive(l, v), derive(r, v)) + case Var(n) if (v == n) => Const(1) + case _ => Const(0) + } + + def main(args: Array[String]) { + val exp: Tree = Sum(Sum(Var("x"),Var("x")),Sum(Const(7),Var("y"))) + val env: Environment = { case "x" => 5 case "y" => 7 } + println("Expression: " + exp) + println("Evaluation with x=5, y=7: " + eval(exp, env)) + println("Derivative relative to x:\n " + derive(exp, "x")) + println("Derivative relative to y:\n " + derive(exp, "y")) + } +} \ No newline at end of file diff --git a/src/test/scala/example/HelloSpec.scala b/src/test/scala/example/HelloSpec.scala new file mode 100644 index 0000000..56f5e66 --- /dev/null +++ b/src/test/scala/example/HelloSpec.scala @@ -0,0 +1,9 @@ +package example + +import org.scalatest._ + +class HelloSpec extends FlatSpec with Matchers { + "The Hello object" should "say hello" in { + Hello.greeting shouldEqual "hello" + } +}