2018-01-01から1年間の記事一覧

2018年を振り返る

普段はこういった、一年を振り返るような記録を残すことはない。ただ、今年は区切りをつけたい理由があるので書く。 2018年は長かった。一言で言えば、仕事に追われた一年だった。2017年に技術者として行き詰まりを感じて長期の休暇を取り、ひょんなことから…

Rustで圏論(6) 小圏・関手・自然変換

0, 1, 2, 3, 小圏 0(対象も射もない圏)、 1(対象が1つと恒等射のみの圏)、 2(対象が2つと、それぞれの恒等射・その間の1つの射からなる圏)、 3(対象が3つとそれぞれの恒等射、射も3つで1つの射が残り2つの射の合成である圏) をそれぞれRustで表現し…

Rustで圏論(5) イチ圏がなかなか作れない

イチ圏 前回はゼロ圏(対象も射も持たない圏)をRustで表現してみました。 次は、1(対象が1つと、その恒等射のみを持つ圏)を定義してみようと思います。 少しダサいですが、勝手に「イチ圏」と表記します。 構造体を作る #[derive(PartialEq)] struct Cate…

Rustで圏論(4) ゼロ圏を作る

対象の族と射の族の型を変更した 今回定義している圏のトレイトCategoryの中には、対象のHashSet(C0)と射のHashSet(C1)を返すメソッドが定義されていました。今回、思うところもあってHashSetからIteratorに変更しました。気分の問題といえばそこまでで…

Rustで圏論(3) 圏はトレイトでは?

前回の話 前回、同型かどうかを判断するコードの中に間違いがあるという話を書きました。 中心となる処理は以下です。 fn is_isomorphism(&self, object1: &str, object2: &str) -> bool { self.has_arrow(object1, object2) && self.has_arrow(object2, obj…

Rustで圏論(2) マクロで独自記法

【要訂正】同型を判断したい 前回は圏を構造化したところまででした。というわけで、そこから様々なことを調べられるようにしたい。 手始めに、同型かどうかを調べる関数を追加した(関数名がダサいのは気にしないでください)。 しかし、実はこの関数の中身…

Rustで圏論(1)

発端 圏論を勉強しているのだが、本格的に書籍を買ってから約一年になる。圏論の勉強では、実際に手を動かして図式を書かないとかなり効率が悪くて、ものぐさな自分もさすがにペンでお絵かきしていた。が、だんだんそれもイヤになってしまい、せっかくなので…

Programming Rustを読んだ

以下の書籍を読んだので、その感想を書くことにする。 shop.oreilly.com やっとProgramming Rustを最後まで読み切った〜!雑に読めばすぐだがちゃんと読むと大変だったぞ!!!— イロノワ (@ironoir) 2018年4月19日 というわけで、タイトルが紛らわしいが、…

新しい言語の学び方の一工夫

「見渡したい」 人それぞれだろうが、私は新しいものを学ぶ時、全体像を把握したい人間だ。「見渡したい」という表現がしっくりくる。 プログラミング言語に関しても同様である。Hello Worldだけ見せられても、スッキリしない。まずは「文法の一覧と標準ライ…

Rustで文字列・ファイル、両方からbyteを読みたいだけなのに

バイト配列をイテレータで読み込みたい Rustでプログラミング言語を作っている。基本的には、ソースコードはファイルを読み込むのだが、テストのために固定の文字列をソースコードとして読ませたくなることが多い。そういうわけで、字句解析器(Lexer)に両…