2015-05-01から1ヶ月間の記事一覧

コップ本2の19章「型のパラメータ化」をやってみる。その1

「関数型待ち行列」をつくる、という題材を通して型のパラメータ化を学ぶ章です。関数型待ち行列の要件は1.head:待ち行列の先頭要素を返す 2.tail:先頭要素を取り除いた形で待ち行列を返す 3.enqueue:指定した要素を末尾に追加した新しい待ち行列を…

返ってくる型がわからないときは、Anyを使う?

昨日、5/14と書いた以下のエントリでは、関数に指定する型パラメータで悩んでいたけど、結局戻ってくる値がわからないのであればAnyを返す、というのでちゃんと動くようにできた。僕が2015/5/14に書いた型パラメータに関するエントリがすごく間違っている気…

僕が2015/5/14に書いた型パラメータに関するエントリがすごく間違っている気がする

数日前の記事(共変とか反変とかわからないので躓いている - 趣味プログラマがまれになんかしたことの記録 )にて、僕は下のように書いたけど、 def get[A >: Any](i:Int):K[A] これは下限境界というやつで、AnyまたはAnyのスーパークラスのみ型パラメータに…

Iterator.duplicateの動き

直前のエントリで気になったのでIterator.duplicateの動きを調べてみた。 val it = Iterator.continually... val (it1, it2) = it.duplicate println(it.foldLeft(0)((c, _) => c+1)) println(it1.foldLeft(0)((c, _) => c+1)) println(it2.foldLeft(0)((c, …

300M超のテキストファイルを読み込ませてIterator.continuallyで処理すると

Iterator.continuallyの動作がどれぐらい大きいファイルまで耐えられるのか確認したく、以下の様なスクリプトを書いてみた。 import java.io.{FileInputStream, InputStreamReader, BufferedReader} val br = new BufferedReader(new InputStreamReader(new …

開発環境のフォントを変えてみた

いままでVimではMS_Gothic、IntelliJ IDEAではSourceCodeProと分けていたのですが、VL_Gothicに統一するようにしてみた。Vim(Before) Vim(After) IntelliJ IDEA(Before) IntelliJ IDEA(After) IntelliJ IDEAのテーマもVimに併せてWombatにしてみた。

共変とか反変とかわからないので躓いている

こんなクラスを作ってみた scala> case class K[A](l:List[A]) そしてこんな関数を作ってみる。しかし実行してみるとうまくいかない。 scala> def returnK(a:A):K[A] = K[A](List(a)) returnK: (a: A)K[A] scala> returnK(1) <console>:15: error: type mismatch; fou</console>…

JenkinsでSpecs2の結果を読むと(It is not a test.) と出てしまう件

せっかくSpecsにスペックを書いているのに、Jenkinsの結果にて(It is not a test)と出てしまうのは嫌な気分です。(下図) これはSpecs2のIssueでSpecs2の3.3では治りました。(下図) 参考リンク→ sbt (0.13) junit xml reporter: "It is not a test" · I…

Lensってなんぞやと思ってたのが、ここ見て一発でわかりました

argonautを使うようにしたら、Monocleという謎のライブラリが追加されていた。HaskellのLensというのをScalaに移植したものらしい。 Lensって最近良く見る。でもなんだかよくわからんなあ、と思ってました。が、下のリンク先を見て一発で分かりました。 Mono…

argonautを使ってみた

設定をXMLよりももっと簡単に記述して読み込みたい、という希望のもとにあれこれ調べるまでもなく、実際Jsonを使ってやってみるのが標準のようだ。Scala標準のJsonパーサーはどうやら使いにくいし今後無くなる方向だそうです。(こちら参照→標準ライブラリのJ…

「本物のプログラマはHaskellを使う」をこなしていく。 第ニ回

前回定義したrepeatedをもう一回使う。 Prelude> let repeated f n = \x -> (iterate f x) !! n Prelude> :type repeated repeated :: (a -> a) -> Int -> a -> a Prelude> let f1 = \f n -> repeated f n 12 Prelude> :t f1 f1 :: Num a => (a -> a) -> Int…

「本物のプログラマはHaskellを使う」をこなしていく。 第一回

勉強しようと思っては何度と無く挫折しているHaskellです。おそらく最大の難関と思われるモナド。例に漏れず僕もモナドがなんだかよくわからない。Functors, Applicatives, And Monads In Pictures - adit.ioが一番わかり易いらしいけど、それでもまだわかっ…