Scala

第14回名古屋Scala

1/21 に、第14回名古屋Scala勉強会に参加してきました。 今回はコメントがなかったので、本の中身を追っていく感じに。 29章 Scala と Java の結合 akka Scala からも Java からも使える、Scala のアクタを書き換えた的なやつ アノテーション 2.8 から、Scal…

第13回名古屋Scala

11/19 に、第13回名古屋Scala勉強会に参加してきました。 27章 オブジェクトを使ったモジュラープログラミング モジュールとしてオブジェクトを捉える Lift とかそうなってる OCaml の(ファーストクラス)モジュールに近い 継承とかも出来る DI 結構普通、そ…

第12回名古屋Scala

10/15 に、第12回名古屋Scala勉強会に参加してきました。 24章 抽出子 Haskell に View Pattern ってのがある リスト 24.1 これはひどい Scalaである意味がない。split後なにやってるか分からない パターンマッチ素敵 なにやってるかとてもよく分かる => (Sc…

名古屋Hackathon

10/9に名古屋Hackathon - ラムダ村に参加しました。 自分は Coq 組で参加。Coq to Scala をやってた。 Coq 組の朝は遅い。にわとりなのに。 環境構築に時間かかってた。make 長い・・・ 最初は Scheme や Haskell のを修正していく感じだったけど、読むだけ…

第11回名古屋Scala

9/17 に、第11回名古屋Scala勉強会に参加してきました。 今回は23章と24章の予定だったけど、盛り上がったので24章は次回に。 23章 for 式の再説 モナド (1) bind : M[A] => (A => M[B]) => M[B] 最初の M[A] がレシーバ (Scala) return : A => M[A] この 2 …

第1回 Scala座

9/4 に、第1回 Scala座に行ってきました。 資料などはこちら。Ustream はこちら。 開会の挨拶 Scala座 全国レベルのScalaの勉強会! 大きなイベントは関東が多い 悔しい! → 名古屋で開催! これまでのScala、これからのScala これまで編 Scalaって JVM上で…

|> in Scala

F# の |> を Scala でやってみた。 scala> class Holder[A](a:A) { | def |>[B](f:A => B) = f(a) | } defined class Holder scala> implicit def any2holder[A](a:A) = new Holder(a) any2holder: [A](a: A)Holder[A] scala> val succ = (x:Int) => x + 1 s…

NotNull

NotNull型を継承すれば、自分で作った型に関しては、nullが入らないことを静的に保証することができます。 class X extends NotNull { ... } とすると、X型の変数にはnullが入れられません。 http://twitter.com/kmizu/status/21992714816 やってみる。 scal…

第10回名古屋Scala

8/20 に、第10回名古屋Scala勉強会に参加してきました。 今回は21章と22章。 21章 暗黙の型変換とパラメーター any2stringadd 怖い scala> 1 -> "a" + "b" res0: java.lang.String = (1,a)b null爆発しろ! implicit parameters、型によって変えられる Monad…

第9回名古屋Scala

7/16 に、第9回名古屋Scala勉強会に参加してきました。 今回は19章と20章。 19章 型のパラメータ化 難しい・・・ 今回はコメント沢山書いたよ! 絵も描いたよ! @rf0444 が人に読める文字を書いている・・・! http://bit.ly/cRJvBy ふぁぼったー / bleis : …

Maybe/Option のリストから普通のリストへ

Ocaml の時は自作したけど、Scala と Haskell は結構簡単にできる。 ↓Scala scala> List(Some(4), Some(2), None, Some(9), None, Some(0)) flatMap (x => x) res0: List[Int] = List(4, 2, 9, 0) ↓Haskell > [Just 4, Just 2, Nothing, Just 9, Nothing, Ju…

遊んだ

久々に (?) Scala で遊んでみる。 再帰さん scala> def z[A,B](f: (A=>B) => (A=>B)): A=>B = (x:A) => f(z(f))(x) z: [A,B](((A) => B) => (A) => B)(A) => B scala> z { (f:Int=>Int) => (n:Int) => if (n < 2) n else n * f(n - 1) } (10) res2: Int = 36…

第8回名古屋Scala

6/19 に、第8回名古屋Scala勉強会に参加してきました。 今回は18章と、こんなの書きました紹介。 19章は次回に。 18章 ステートフルオブジェクト 副作用があるメソッドの設計 副作用がある場合はUnitを返すようにするのがいい感じ コマンド・クエリ分離則 プ…

第6回名古屋Scala

4/16に、第6回名古屋Scala勉強会に参加してきました。 15章の途中までしか見直せてなかったけど、何とかなった。 てか、15章の後半はサンプルで、特に突っこみもなかった。 13章 パッケージとインポート インポートするときにメンバーの名前を変えたり、隠し…

do みたいな for

Scala の for を Haskell の do みたいに使ってみる。 Haskell f :: Maybe Int -> Maybe Int -> Maybe Int f am bm = do a <- am b <- bm let c = a + b return (2 * c) > f (Just 3) (Just 1) Just 8 > f Nothing Nothing Nothing > f (Just 3) Nothing Not…

第5回名古屋Scala

3/19に、第5回名古屋Scala勉強会に参加してきました。 今回は継承とかトレイトとか。 ScalaのforはOption型でも使えて、Haskellのdoみたいに使えるなーとかいう話題があった。 scala> val x = Some(3) x: Some[Int] = Some(3) scala> for (i <- x) yield (i …

Y(Z)コンビネータ

無名関数が再帰できるとか。 scala> def Y[A,B](f:(A=>B)=>(A=>B))(x:A):B = f(Y(f))(x) Y: [A,B](((A) => B) => (A) => B)(A)B scala> Y((f:Int=>Int) => (n:Int) => n match { | case m if m < 2 => m | case _ => f(n-1) + f(n-2) | })(7) res1: Int = 13…

関数、掛け算

scala> 1 to 8 map(1+) foreach print 23456789 scala> println("hoge" * 4) hogehogehogehoge こんなこと出来たんだ。

中括弧

if の条件の部分は小括弧を中括弧に出来ないっぽい。 while も出来ないっぽい。 for とかは出来るのに。 逆に match は中括弧じゃないと駄目みたい。 scala> { for { i <- 1 to 3 } yield (i) } foreach print 123 scala> def inc(a: Int) = a + 1 inc: (a: …

ファイル1

カレントディレクトリ内のbatファイルの行数を数えてみる。 scala> import java.io._ import java.io._ scala> import scala.io._ import scala.io._ scala> new File(".") getCanonicalPath res0: java.lang.String = C:\Users\rf\Documents\scala\bin scal…

関数合成

やってみる。 scala> val f1 = (a:Int) => a + 1 f1: (Int) => Int = <function> scala> val f2 = (a:Int) => a * 2 f2: (Int) => Int = <function> scala> val fs = List(f1, f2, f1, f1, f2) fs: List[(Int) => Int] = List(<function>, <function>, <function>, <function>, <function>) scala> (Function chain fs)(3) res31:…</function></function></function></function></function></function></function>

カリー化

おー。 scala> def add(a: Int, b: Int) = a + b add: (Int,Int)Int scala> add(2, 3) res0: Int = 5 scala> val add_ = Function.curried(add _) add_: (Int) => (Int) => Int = <function> scala> add_(2)(3) res1: Int = 5 scala> val inc = add(_: Int, 1) inc: (I</function>…

コマンドリスト

scala> List(() => println("a"), () => println("b")) foreach(_()) a b

無限リスト

作ってみる。 平方数 scala> val s = Stream from 1 map(x => x * x) s: Stream[Int] = Stream(1, ?) scala> s take 16 foreach(printf("%d ", _)) 1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 繰り返し scala> Stream from 0 map(x => x % 3 + 1)…

DFT

学部3年生がCで頑張ってる所。 scala> def dft(xs: List[Double]) = { | import java.lang.Math._ | val N = xs size; | for (k <- 0 until N) yield { | val as = for (n <- 0 until N) yield { | xs(n) * cos(2 * PI * n * k / N) | } | val bs = for (n <…

クイックソート

作ってみる。 scala> def qsort[T <% Ordered[T]](xs: List[T]): List[T] = xs match { | case List() => List() | case y::ys => | qsort(ys filter(_ < y)):::List(y):::qsort(ys filter(y <= _)) | } qsort: [T](List[T])(implicit (T) => Ordered[T])Lis…

総和と総積

ほー。 scala> (1 to 10).foldLeft(0)(_ + _) res52: Int = 55 scala> (0 /: (1 to 10))(_ + _) res53: Int = 55 scala> (1 to 10).foldLeft(1)(_ * _) res54: Int = 3628800 scala> (1 /: (1 to 10))(_ * _) res55: Int = 3628800 追記 scala> 1 to 10 redu…

チャー研

「謎のプログラマ」的な。 ☆「泉君、たなびたいことがあるんだ、ちょっと。」 ☆「一度でいいから、君のプログラムを。」 研「どうして君が?」 ☆「あこがれているんだ。関数型言語に。」 ☆「さぁ、早くプログラムを見せてくれ。」 ☆「一回きり見せてくれれば…

なんかのAA

「Scalaのプログラムが手続き型だった 直したい。。」的な。 ∧_∧ ( ゚ω゚ ) Scalaは任せろー var i = ... C□l丶l丶 var i = ... / ( ) やめて! (ノ ̄と、 i しーJ ∧_∧ ( ゚ω゚ ) ・・・・ C□l丶l丶 / ( ) ・・・・ (ノ ̄と、 i しーJ ∧_∧ ( ゚ω゚ ) i = …

続ジェネリックなmax

可変長版。 scala> def max[T <% Ordered[T]](elements: T*): T = elements toList match { | case List(x) => x | case x :: rest => | val maxRest = max(rest: _*) | if (x > maxRest) x else maxRest | } max: [T](T*)(implicit (T) => Ordered[T])T sca…