ScalaでProject Euler(1)

Scalaは書きやすくて実行速度も速いという話なので、これからProject Eulerの問題を解きながら勉強していきます。関数型ということなので、HaskellPythonと比較しながら進められたらと思います。


まず、ScalaはJavaVM上で動くのでそれをインストールしなければなりません。このへんから落としてきます。それから、Scalaを適当にダウンロードします。インストールしたディレクトリの下のbinにパスを通しておけばよいでしょう。Windowsならコマンドプロンプトを開いて、scalaと打って、

Welcome to Scala version 2.8.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_24)
.
Type in expressions to have them evaluated.
Type :help for more information.

などと表示されればインストール完了です(exitで抜けられます)。
参考資料は、

SCALAプログラミング入門

SCALAプログラミング入門

これを半分くらい読んだのですが、ライブラリの使い方がほとんど書いていないのが残念です。Scalaメモ(Hishidama's Scala Memo)を片手に勉強するとよいでしょう。

最初の一歩

まず、

object test1 {
    def main(args :Array[String]) {
        println (1 + 2)
    }
}

といった感じでtest1.scalaという名前のテキストファイルにします。あー、昔やったJavaがこんな感じでしたね。めんどくさいなー。そして、コマンドプロンプトから

>scalac test1.scala

と打ってコンパイルします。10秒以上かかるんですが。そうすると、test1.classというファイルがでてきています。Javaですね。これをJavaVM上で実行するわけです。コマンドプロンプトから次のように打ちます。

>scala test1

1秒くらいかかって次のように表示されました。

3

ちゃんと動きましたね。
しかし、こんなオブジェクト指向のコードは書いてられないですね。と思ったら次のようにも書けるようです。

println (1 + 2)

これをtest2.scalaという名前で保存して、scalacでコンパイルすると怒られます。そうではなく、

>scala test2.scala

と打ちます。そうするとメモリ内でコンパイルして実行してくれるんですかね。ちゃんと、

3

と表示されます。4秒以上かかるんですが。
タスクマネージャを見たら、java.exeってのが80MB以上メモリを使っています。これは凶悪ですね。消しましょう。そのあと同じコマンドを打つと、11秒くらいかかりました。しょうがないですね。JavaVM上で動くというのが本当に残念です。.scalaの拡張子をscala.batに関連付けておけば、

>test2.scala

でいけます。