2015-01-01から1年間の記事一覧
大晦日ですね。皆さん、大晦日にはその年の出来事をまとめるのが習わしのようなので、自分も何か書いてみることにします。 今年の振り返り 新人研修(Scala編)のテキストを書いた 既に ch.nicovideo.jp で書かれてる公開情報なので書きますが、「エンジニア…
私生活的なことは、普段このブログには書かずにTwitterで済ませるのですが、ちょっと気がむいたので書いてみます。といっても、タイトル以上のことはほとんどないのですが。 自分の住んでいるアパートの近くには、24時間営業の肉のハナマサがあり、そこで、…
まあタイトルの通りなんですが、とりあえずこれまでの自分の言語作成遍歴についても触れておきます。 大学入学前:四則演算パーザ&評価器 大学1年:正規表現パーザ&評価器 大学2年:オブジェクト指向言語Onion(Javaコードへのトランスレータ) 大学3年…
何はともあれ以下のコードを見てください(ちなみに複素数クラスの実装は、 d.hatena.ne.jp を参考にさせていただきました): trait Complex { type T def re(a: T): Double def im(a: T): Double def make(re: Double): T def plus(a: T, b: T): T def minu…
追記:Java 7以降(つまり、現在)はtry-with-resources構文があるので、それを使えばよいです。ここでは、Java 6かそれ以前のコーディングスタイルについて主に言っています。 kmizu.hatenablog.com におけるkrxrossさんのコメント java脳だと、「fw = new …
この記事はCrystal Advent Calendar 2015 23日目の記事です。 まず最初にお断りしておきますが、私はCrystal言語に関しては初心者もいいところです。じゃあなぜCrystal Advent Calendarにわざわざ参加したかというと、Crystalは実用言語としてはやや特殊な静…
詳細な時期は未定(来年初頭予定)ですが、Scala雑談会なるものをやろうと企画しています。Scalaの勉強会といえば、160回超の開催を続けているrpscalaが有名ですが、今回やろうとしているのは「勉強会」ではなく「雑談会」です。これの元ネタは、5年ほど前ま…
Martin Odersky氏と言えば、Scalaの開発者として有名ですが、そんな彼がJDK 1.3以降のjavacの作者でもある(ただし、その時点ではジェネリクスはオフであった)ことは知る人ぞ知る話になっています。 さて、ということは、OpenJDKのjavacのソースコードにOde…
表題の書籍について、出たとき(2015/5/29)に買って随分放置していたのだが、最近、一通り読んでみたので簡単な感想を書いてみようと思う。 結論からいうと、Scalaについて特に使う予定はないがおおまかにどんな言語か知っておきたいという方にはそこまで悪…
本当はScala Advent Calendarの記事として書こうと思っていたのですが、既にだいたい埋まってしまっていたので、自分のブログで書きます。Scalaistの皆さん、プレースホルダ構文、使ってますよね? List(1, 2, 3, 4, 5).map(_ + 1) // List(2, 3, 4, 5, 6) …
Higher Order PEG(HOPEG)とは何かというと、Parsing Expression Grammar(PEG)の規則が引数を取れるように拡張したものです(ちなみに、引数を取る規則をRule Constructorと呼んでいます)。 後で考えると、0階のPEG = 普通のPEGとすると、1階のPEG = First O…
こんばんは。久しぶりにブログ書いてみることにしたのですが、以前と同じネタだとモチベーションが保てないので、今回はちょっと変わったタイトルにしてみました。 平仮名にしたかっただけだろうおまえと言われそうですね。はいそうです。 というのはおいと…
勉強会についての詳細はこのエントリの一番下の方をみてもらえればと(もうほとんど枠が埋まっちゃってますが。この辺はほんとに予想外)。このエントリでは、なんでこんな勉強会やろうとしたかという動機でも書いておこうかなと思います。 私は大学院生時代…
淡々と。 gist.github.com
ただひたすら書く。そろそろモジュールに分けた関数群を別ファイルに分離してもいいかも…。 gist.github.com
Rustでモジュールを定義する方法について。mod module_name { }で囲んだ範囲がモジュールになるらしい。また、モジュール内の関数の内、pubを付けなかったものはモジュールprivateな関数になる。useはそれが使われたモジュールのスコープ内でのみ有効、など…
お次はfilter。少しずつ関数が増えていく。 gist.github.com
まだまだ所有権の概念に慣れない今日この頃だが、とりあえずArc<T>でごまかしている。ともあれ、ようやくList上の高階関数が揃ってきた。今回の難所はflat_map。間にconcat関数を定義してやることでなんとか実装。 gist.github.com</t>
map関数も欠かせませんね。というわけで: gist.github.com ループで回すのはめんどくさいので、fold_rightで実装しました。
fold_leftができたので次はfold_rightもできるよね、というわけで。 gist.github.com
Listを作ったので次はfold_leftだよねー、というわけで書いてみた。しかし、型を合わせるのに結構手間取ってしまった… gist.github.com
Vec<T>型を引数で受け渡して、それをList<T>型に変換することで、とりあえずリストの生成を簡単にすることができた。しかし、ここでT : Copy にしちゃったからList<List<>>型はnew_list関数では作れない気がしてきた。 gist.github.com</list<></t></t>
とりあえず関数型プログラミングには必須だろうということで、Listを定義してみた。コンスセルのtail部分にいちいちBox::newつけなきゃならない(理由はわからなくもない)のがめんどいけどどうにかならないものか…。 gist.github.com
Hello, World!やったので次はHello, Macro!ですね。というわけで、サンプルコードを真似して書いてみました。 macro_rules! hello { () => ( println!("Hello, Rust Programming Language"); ) } fn main() { hello!(); } () が空引数にマッチするパターンを…
Rustには高機能なマクロがあると知って、ちょっと勉強を始めてみることにしました。飽きたらそこで止めるかもしれませんがご了承ください。 まずは定番のHello, World!書いてみましょう。 fn main() { println!("Hello, {rust}", rust = "Rust Programming L…
出版社の方から報告があったのですが、紙本でしか買えなくて持ち運びに不便という方に朗報です。 Amazon.co.jp: Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 電子書籍: Paul Chiusano, Rnar Bjarnason, 株式会社ク…
知人からの依頼で、QCon Tokyo 2015 Conferenceというもので、発表することになりました。ちょっと参加費が高い上に平日ですが、他にScala関係の発表あるし、自分が大学時代にバイトしてた産業技術総合技術研究所でお世話になった一杉 裕志先生の脳研究に関…
既にid:xuweiさんが書いてらっしゃるので今更なのですが、一応自分も一通り目を通して翻訳レビューしたので宣伝(とはいっても売れても印税は入りませんが :-))。 タイトルの邦訳の『Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関…