Program

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 …

foldを使ってfoldを作る

foldr/foldl を使って、foldl/foldrを作ってみる。 myFoldL :: (a -> b -> a) -> a -> [b] -> a myFoldL f y xs = foldr (\x g a -> g $ f a x) id xs y myFoldR :: (a -> b -> b) -> b -> [a] -> b myFoldR f y xs = foldl (\g x a -> g $ f x a) id xs y -…

Yコンビネータ

フィボナッチと階乗やってみる。 > let y f = f $ y f > :i y y :: (b -> b) -> b -- Defined at <interactive>:1:4 > y (\f n -> if n < 2 then n else f (n-1) + f (n-2)) 7 13 > y (\f n -> if n < 2 then n else f (n-1) + f (n-2)) 100 Interrupted. ← (´・ω・`)ショホ</interactive>…

RWH 4章練習問題1

なんか作るのにすごい時間かかった・・・ リストを述語で分割 splitWith :: (a -> Bool) -> [a] -> [[a]] splitWith f [] = [] splitWith f xs = case span f xs of (a,b) -> a : (splitWith f $ snd $ span (not . f) b) > splitWith (/= 'a') "igaiahaidih…

リストとか

Scalaでやってたやつとか。 平方数 > take 10 $ zipWith (*) [1..] [1..] [1,4,9,16,25,36,49,64,81,100] > take 10 $ map (\x -> x * x) [1..] [1,4,9,16,25,36,49,64,81,100] 総和と総積 > foldl (+) 0 [1..10] 55 > foldl (*) 1 [1..10] 3628800 > foldl1…

中置関数

map とかって、中置で使うとOO系言語と逆になるんだよなぁ・・ > :info map map :: (a -> b) -> [a] -> [b] -- Defined in GHC.Base > (\x -> x + 1) `map` [1..10] [2,3,4,5,6,7,8,9,10,11] > succ `map` [1..10] [2,3,4,5,6,7,8,9,10,11] > let myMap a b …

Haskellやる!

Real World Haskell―実戦で学ぶ関数型言語プログラミング が研究室に入ったので、本格的に Haskell やってみようかと。 とりあえず、3章まで読んだ。 目指せリア充! (注:「Real World Haskell充」の略) 小ネタ: 3項演算子 > let (+++) a b c = a + b + c …

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…

チャー研

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

続ジェネリックな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…

ジェネリックなmax

なんか難しい。 scala> def max[T](a: T, b: T)(implicit orderer: T => Ordered[T]) = if (a > b) a else b max: [T](T,T)(implicit (T) => Ordered[T])T scala> max(1, 3) res6: Int = 3 scala> max(10, 3) res7: Int = 10 scala> max(10., 3.) res8: Doub…

ソート

scala> List(3, 6, 2, 6, 3, 0, 5, 1) sort(_ < _) foreach print 01233566 ほー。

名前渡しパラメータ

面白い。 scala> def add(a: Int, b: Int) = b + a add: (Int,Int)Int scala> def aa() = { println("aa"); 1 } aa: ()Int scala> def bb() = { println("bb"); 3 } bb: ()Int scala> println(add(aa(), bb())) aa bb 4 scala> def add_(a: => Int, b: => In…

隠蔽されたフィールドへのアクセス

親は super でできるけど、その上にはいけるのだろうかと。 できるらしい。 class A { int a = 1; } class B extends A { String a = "B#a"; } class C extends B { A a = new A(); void hoge() { System.out.println(a); // C#a System.out.println(super.a…

さーて来週のコンピ研OO勉強会は?

簡単な文字列処理やります。 "カモメカモメカチンカチン".replace("カ", "") とか。 サーセンww

CollectionのtoArray

CollectionインタフェースのtoArrayメソッドは、引数なしでObjectの配列を返す奴と、ある型Tの配列を引数に取ってTの配列を返す奴がある。 なんで、引数なしの奴はTの配列を返さないんだろうと思ってたが、 T[] result = new T[size]; とか出来ないのか。 で…

fluent interface

メモ。 http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FluentInterface

TableTree

Eclipseのビュー作ってて、展開できる表欲しいなと思って、 org.eclipse.jface.viewers.TableTreeViewer と org.eclipse.swt.custom.TableTree 使おうと思ったら非推奨だった。 代わりに、 org.eclipse.jface.viewers.TreeViewer org.eclipse.swt.widgets.Tr…

jMock

Bさんから勧められて。 なかなか面白そうだから、調べておこう。 とりあえずメモ。http://www.jmock.org/ http://d.hatena.ne.jp/devbankh/201002 http://www.limy.org/program/java/jmock/what.html http://www.itarchitect.jp/print/?menu3=34462 Bさんか…