scala

Scalaスケーラブルプログラミングが、

帰りに本屋によったら明日発売なのにもう売ってた。 amazonで予約してるのに、、、ちょっと中身のぞいてみたら文字ぎっちり。 原書に比べてずいぶん薄くなってたからな。とりあえず、amazonから届くのを待つ。 そして、この書籍代がどこからでるのかは考える…

久しぶりにScala。で、頭の体操

ココ最近、書いてなかったので復習と頭の体操をかねてScalaで 素数を求めるプログラムを書いてみる。まず、素数とは? 1とその数以外のどんな自然数によっても割り切れない数字 のこと で、作った。 def printPrimeNumber(x: int) = { def f(x: int): boolea…

いよいよ来るのかっ!?

第1回 なぜScalaなのか? http://itpro.nikkeibp.co.jp/article/COLUMN/20080613/307981/ Scalaを取り上げた連載が始まったみたい。なんかうれしい。

typeは関数型の別名をつけるためのものか

複数の関数で同じ意味合いの引数の型を一括で制御できるな。 こんな関数があるとして def f(x: (Int) => Int) = x(100) f((y: Int) => y * 100)なんてのがtypeを使って書くと type F = Int => Int def f(x: F) = x(100) f((y: Int) => y * 100)ってなる。 こ…

defがよくわからない

defは関数を宣言するとき。 って思っているのだが def a: String = "A"みたく変数を宣言できちゃう。 厳密には変数でなく関数なのかも。とりあえず、defとvalで比べてみる scala> def a: String = "HOGE" a: String scala> var b: String = "PIYO" b: String…

今日(いまさら)知ったこと

Pythonと同様""""""でくくれば、複数行にわたって書ける。 scala> var s = """ | hogehoge | piyopiyopiyo | | """ s: java.lang.String = hogehoge piyopiyopiyoXMLはそのままコードに書ける scala> var xml = <root><hoge></hoge></root> xml: scala.xml.Elem = <root><hoge></hoge></root>scala.xml.Elemクラス…

HashMapをつかってみた。

Javaからいつの間にか脱線。 HashMapへの要素追加。 import scala.collection.mutable.HashMap var h = new HashMap[String, Any] h + ("hoge" -> "HOGE") h.update("fuga", "FUGA")updateメソッドで追加するのと、 +メソッドで追加するのとできるみたいだ。…

ArrayBufferを知る。そしてapiあった。

みずしまさんよりコメントをいただいた。ありがとうございます。java.util.ArrayListもいいけど、 scala.collection.mutable.ArrayBufferってのがあるのか。よくよく考えたら、ダウンロードしたpdfしか見てなかったけど、 Javaみたくapiあるんじゃないか?と…

Genericsに絡んで書き方注意。

ArrayListを使うのに、 var a = new java.util.ArrayList() a: java.util.ArrayList[Nothing] = []となって、型がNothingとなってしまってaddで要素を追加しようとすると エラーになった。 あ〜これが、うわさのGenericsか!と思って var a = new java.util.…

またArrayにはまった?

最近Arrayすきだな〜。 本日発見。 var a = new Array(3)見たく、配列の長さを指定してnewもできる。 ついでに、 中身を取得?するapply 中身を更新するupdate Iteratorを返すelements 指定した要素の配列を返すsubArray flatMapこれはまだためしてない。 っ…

JavaでいうGenericsか。

ソースをみてて意味がわからなかった def func[A](x: List[A]) = ....の[A]の意味。 いろいろ調べてみると、JavaでいるGenericsと同じ感じらしい。 Javaは1.4以降はほぼ書いたことがなく、新機能を本でみてたくらい だったので、この結論にいたるのにかなり…

Listとかいろいろさわった記録。

List リストの宣言とheadとtail scala> var l = List(1, 2, 3) l: List[Int] = List(1, 2, 3) scala> l.head res0: Int = 1 scala> l.tail res1: List[Int] = List(2, 3)headとtailはSchemeのcarとcdrに相当するっぽいな。 ついでにいうと、consも使える。 c…

引数の値渡しと名前渡し

値渡しと名前渡しとは? 関数の引数渡しの方式で、 実引数を評価した結果を仮引数に渡すのが値渡し(普通に渡すのと同じ) 実引数を評価せず、値が必要になるまで評価を待つのが名前渡し という。 宣言のしかた 値渡し 仮引数名: 型名 名前渡し 仮引数名: =>…

scalacをするのとしないのと

http://d.hatena.ne.jp/daisun/20080322/1206163454 の最後に書いた、コンパイルしなくても動くとか動かないとかの謎。 いまだ理解できていないし答えも出ていないけど とりあえず考えたことをまとめておく。 Javaは? まず、scalaもJVM上で動作するのでJava…

どうやらobjectがclassってのは間違いのようだ

何日か前にscalaではJavaでいうclassはobjectって書くと書いたけど、それは間違っていたようだ。 classはやっぱりclassみたい。 scalaではclassはコンストラクタもかねてclass クラス名(){}でかけるようだ。 では、objectっていうのはなにか? objectはmodul…

小学生のうそが本当になる機能

初めてscalaをみて衝撃をうけたのが、 Traitって機能のwithを使ったMixin。 なんとインスタンスに対してクラス継承するようなことができる。 class Piyo(){ } trait Hoge(){ } var piyohoge = new Piyo with Hoge みたいに。つまり、 「俺、昨日、魔法使いが…

ソースを読み解く

サンプルにでていた def sum(f: Int => Int): (Int, Int) => Int = { def sumF(a: Int, b: Int): Int = if(a > b) 0 else f(a) + sumF(a + 1, b) sumF }これを読み解く。まず、 def sum(f: Int => Int): (Int, Int) => Intsumって名前の関数を宣言している。…

なんとなく似てる

Scalaの概念というか考え方というか、どことなくPythonに似てるなと 双方のfor文を眺めていたら、思った。

超入門=>まだ入門もできていない

とりあえずインストール windows http://www.scala-lang.org/からダウンロード ダウンロードしたファイルを解凍 binにpath通す mac macportsがあれば、 sudo port install scala でかってにやってくれる。 すげー楽。 わかったこと 変数と定数 変数はvar、定…