プログラミング好きの備忘録

関数型言語とか、証明とか

TAPL読み始めました

ようやく夏休みです。

夏休みにやりたかったことの1つである「TAPLの読み進め」を始めました。
Prefaceは必要そうな部分をざっと読み、1章に入りました。

2ページの上半分でストップ。単純に日割すると一日8~10ページなのですが、この調子だと達成は難しそうです。

まだありました

夏休みにやりたいこと、まだありました。


以前購入して流し読みして放置していた、「テスト駆動開発」の写経を再開したい。


こうして見ると、「時間があるから大規模なプログラムを作りたい」という感じではなく、「この機会に知識を蓄えたい」という方向に偏ってますね。基礎も大事だけどコーディング力も大切なはずなので、何か作りたいです


競技プログラミングのうち、特にTopCoderは半年以上離れていて、きちんとリハビリしないとまったく問題が解けない状態です。(もともと灰コーダー底辺ですが…)
C++全然やってない…

夏期休暇にやりたいこと

やるべきことがあるときに限って、そうじゃないことが捗る… 試験前の掃除、とか。

発端を忘れてしまいましたが、気になる単語からリンクを飛んでいった結果、やりたいことが浮かび上がってきました。


圏論の本を読む
途中挫折の可能性もありますが、とにかく触れてみるべき
きっかけはもちろんHaskellです


・カリーハワード同型対応
本や論文があったら読んでみる
これは、証明駆動に関連した話題。


・Certified Programming with Dependent Types (Adam Chlipala)
依存型による、証明されたプログラミング(直訳)
pdfにして350ページ超の文献
Coqに関する話。


・Hoare論理
部分的正当性の表明(という言い方を見ました。)
事前条件、事後条件
これは手が出るかどうかわからないのでメモ程度に。


・Types and Programming Languages (Benjamin C. Pierce)
型付きラムダ計算についての知識を広げたい。
大学の図書館に置いてあったので二ヶ月前に借りたが、厚すぎて時間が取れず、挫折(あと英語)
いきなりこれで入るのではなく、入門用の本があるかもしれないので調べてみる。



英語の本を読むときには一度に全部読もうとすると死にそうなので重要な部分に絞るべき?
そのへんのテクニックをまず調べる

Haskellで正規表現

サークル活動の記録をここ半年間つけているのですが、そろそろデータとしてまとめたくなりました。
・試合数
・勝った回数
・負けた回数
・勝率
などなど。

解析しやすいようにフォーマットは統一してあるので、正規表現を使えばほぼ一発!

問題は使用する言語。前までだったらRubyでやっていたのですが、(というか、今でも気軽に使う言語はRuby)、言語は自分で設定した目的のために使いながら覚えるのがいいと思いHaskellで挑戦。

調べてみたら、Haskell正規表現ってちゃんとできるんですね。エスケープ文字がどれくらい使えるかまだ調べてないのですが。
あと、Maybeモナドの使い方がよくわかっていないのですが。(正規表現の結果がJustで返ってくるらしい)

正規表現以外では、以下のことができれば目的のコードが書けそう。
・ファイル入出力

副作用ありの関数が多くなりそうですが、純粋な関数で書けそうなところをそう書く努力が必要ですね。

本を買いました

忙殺されていて、最近コーディングできていません。ブログの更新がないのが何よりの証拠です。コーディングしてたら何かしら疑問点や成果があってブログに書くはず。


夏季休暇に読むために買った本をメモ

・『すごいHaskellたのしく学ぼう!』
(Miran Lipovaca 著/田中英行・村主崇行 共訳)
通称「すごいH本」です。我流でコードを書くよりちゃんと本を読んで勉強したほうがいいだろうなと思い、購入することにしました。話題になってますしね


・『Code Reading -- オープンソースから学ぶソフトウェア開発技法
(Diomidis Spinellis著、(株)トップスタジオ訳、鵜飼文敏/平林俊一/まつもとゆきひろ監訳)
「コードは小説より面白い!」を売り文句にしている本。今まで、他人のコードを読んだことがほとんどないので、この本で読み方を勉強します。

#小説より面白い…だろうけど、分厚い本だから小説みたいに気軽に持っていけない

ARC003に参加しました

昨日に引き続き、プログラミングコンテストに参加しました。

ARC003
制限時間は90分、問題数は4問。

303人中236位でした。B問題の誤答をなくしてたらもう少し順位上がってた。

A問題
大学のGPAの計算。やるだけ


追記:2012/05/27/22:09
後から見て思ったのですが、"ABCCD"を"43221"にmapしてfold、最後に平均を取れば関数型っぽく解けますね。まだまだ関数型脳になってない。


B問題
単語の末尾から見ていく辞書

リバース、ソート、リバースの解法はすぐに浮かんだ。
mapを使ってサラッと解けた。関数型言語の恩恵ですね。

しかし、
import Data.List
とすべきところを
import List
にしていてコンパイルエラーを食らったり、
putStrとすべきところをputStrLnにして改行重複でWAになったりした。
(putStrLnって末尾が'\n'のときには改行重複しないと思ってたんだけど…要確認)


C問題は解答の概略を聞いてもよくわかりませんでした。復習?
解答をHaskellで書けるかどうかもポイントです。

ふか杯

AtCoderにて開催された、第5回ふか杯に参加したのですが、だめだめでした。

 

ふか杯とは、3時間で7問の問題を解く形式のプログラミングコンテストです。標準入出力で判定するので使用言語は自由。

 

結果は0完、というか0提出。終わって少ししてA問題のコードが書けたので、貼っておきます。言語はHaskell

 

A問題

最低限の出席回数で単位を取りたい、省エネ学生の問題。

 

 

 原因を振り返ると、

 

・始めた時間が遅い

別のことやってて、始めたのは制限時間の半分を過ぎてから

 

・標準入力の扱い

word()関数の存在を忘れてた

 

・型

bindの使い方とか、IO()とか

 

問題の解き方はすぐにわかったのに、(わからないほうがおかしい)、書くのにこんなに時間かかったということはHaskellの文法をまだ全然理解してないということ。コード書きまくればだんだんと覚えていくのでしょうか。

 

はてブに関しては、gistを貼り付けることに成功したので満足。簡単ですね。