Scala

ScalaのTraitを使ってみる

30分プログラム、その442。なんとなくtraitを使ってみたかったので、RubyのEnumerableっぽいやつを作ってみた。foreachを実装した上でEnumerable traitをくっつけると、mapとfilter、concatMapのデフォルト実装が使えるようになる。 class MySet[T <% Ordere…

フィボナッチ数が黄金比に収束するかの確認

30分プログラム、その436。またもmixiの課題コミュからぱくってきた。フィボナッチ数列の第1項と2項を自身で決め、黄金比に収束するまで結果を出力するプログラム。より。 四則演算くらいしか書けないうちには荷が重過ぎる課題です・・・orz よろしくお願…

Predef.printlnはConsole.printlnに移ったらしい

30分プログラム、その430。Scalaでなんぞやのプログラムを書こうとしたら、printlnが使えなくて、それで30分たってしまったので、今日はここまで。 要するに、printlnではなくConsole.printlnを使えばいいらしい。昔はPredef.printlnがConsole.printlnを呼ん…

Fuzzing用ファイルジェネレータ

30分プログラム、その424。ファジング:ブルートフォースによる脆弱性発見手法を読んでいるときに、テスト用のテストデータのルールをもっと宣言的に書ければいいのに、と思ったので試してみる。 例えば、 def point = "(" ~ digit ~ "," ~ digit ~ ")"と書く…

乱数を生成するfor..yield

30分プログラム、その418。mapやらfilterを定義すれば、俺々データ構造でもforが使えるらしいので、試してみる。 というわけで、for(n ちなみにscala.Randomはdeprecatedで、scala.util.Randomを使うべきらしいけど、ボクのScala処理系は古いらしくてscala.u…

Monad in Scala

Programming in Scala, Third Editionを読んでいたら、 Scalaのforはコンパイル時にmapとかfliterとかの関数呼び出しに展開されるよ。最終的に型があっていれば、mapとかの型に制限はないんだけど、以下のような型が一般的だよ。 // CはコレクションのC clas…

Scalaって末尾再帰の最適化してるの?

30分プログラム、その412。id:athosがScalaが末尾再帰の最適化してるか気にしてたのでコードを書いて確かめてみた。 ちなみに、id:athosはjavapで逆コンパイルしてみてgotoになっていることを確認したらしい。 使い方 // 末尾再帰じゃないやつはスタックオー…

Python風の%をScalaで

30分プログラム、その405。Pythonの文字列の%をScalaでもやってみる。Pythonの%はこんな感じで、要するにsprintf。 >>> "Hi, %s" % "mzp" 'Hi, mzp' >>> "The %s is %d." % ("answer",42) 'The answer is 42.' implicit conversionを使って、Stringにメソッ…

SICPをScalaで淡々と解く

30分プログラム、その398。SICPをScalaで淡々と解くお。 csnagoyaのSICP読書会に参加するか迷いつつも、とりあえず演習問題だけは解いておく。 1.7 def average(x : Double, y : Double) = (x + y) / 2 def improve(guess : Double, x: Double) : Double = a…

Scalaで集合(Set)

30分プログラム、その391。Programming in Scala, Third Editionが型パラメータのとこに入ったので、コンテナっぽいクラスが作ってみたくなった。なので、集合クラスを作ってみた。ポイントは、 class MySet[T

文字の種類カウント付きwc

30分プログラム、その383。 setクラスをちょうど読んだので、使ってみた。普通のwcに加えて、単語の種類も追加してみた。あと、Scalaでコンパイルするには、objectで包まなければならないらしい。そういえばそんなことが書いてあった気がする。 使い方 $ sca…

もう一つの三項演算子

普通、三項演算子といえば?:演算子のことを指す。 でも、Scalaには?:以外の三項演算子がある。 scala> (0 /: List.range(0,10)) (_ + _) res0: Int = 45 要するにfoldLeft。でも、それを中置演算子っぽくしたのは新しいと思う。ちょとキュンとした。 ちなみ…

case classを使ってtreeを

30分プログラム、その375。Programming in Scala, Third Editionで、とうとうバリアント型ことcase classが登場したのでTreeを作ってみた。 本当は二分木が作りたかったのだけれども、型パラメータTに条件をつける方法が分からなかったので、深さを測る関数…

固定小数点数

30分プログラム、その365。Scalaで固定小数を扱うクラスを作ってみた。 固定小数は、1.44を144、0.01を1のように小数点の位置を固定してしまう表現方法。 使い方 scala> val x = new FixNum(144,100) x: FixNum = 1.44 scala> val y = new FixNum(20,10) y: …

Scalaのforは値を返す

Scalaのfor式はなんと値を返してくれます。 普通にforを書くと、返ってくるのはUnitなので嬉しくないです。でも、 for(x <- 1 to 3) yield x * 2と書くと、[2,4,6]という配列(に似たイテレータ)が返ってくる。 ちょうすげぇ。 id:Gemmaさんに自慢したら、「m…

Scalaでプログレスバー

30分プログラム、その358。 せっかくProgramming in Scalaを買ったので、Scalaでプログラムを書てみた。 特にネタがなかったので、最近どこかでみたテキスト版のプログレスバーを作ってみた。 使い方 $ scala progress.scala 55% [=========================…