放射状

勉強のメモ。

もしある日突然全く知らない言語「F#」で魔法陣問題を解けと言われたら

まあそういうことになったわけですよ。ちなみに私の現在のスキルですが、

  • ごく最近lispをかじり始めた。まだコンスするところまでたどり着いてないレベル。
  • pythonも少しずつかじり始めている
  • 実務ではsqlとかphpとかjavascriptとかjavaとかC#とかそっち系が多い。
  • だけど「PHPがお得意なんですね」と言われるとキレる程度のプライド
  • 心の中で愛しているのはC++。大作sqlを自己満足で作っているときが最も幸せ。

これでお察しいただけると幸いなのですが、これまでの言語とパラダイムが全く違うわけですよ。学んでいると脳を横に輪切りにされて90度グキッと曲げられている気がしてきます。なんというか、C→C++JavaPHPjavascriptC#と覚えていったときのチョロさが懐かしい。

けっこう悪戦苦闘したので、ログをメモしておきます。

実際にやったこと

魔法陣問題についてはこのあたりをご参照ください。

チュートリアルプロジェクト

「VisualStudioでプロジェクトを作るときに『チュートリアル』っていうのがあるんですが、それでプロジェクト作るとF#の文法をまとめたfsxファイルが付いてくるので、それを参照して問題を解いてくださいね」と言われる。実際そうしてみると672行ぐらいのざっくりした文法説明書きを読むことができる。読みながらちびりちびりと書いてみる。
…ぜんぜんわかんねーし! まず突然出現する「->」。何の説明もない。推測する。わからん。
放射氏「ぜんぜん書けないんですけど」
部下の中の人「はあ、俺はそれで書けましたけど」

…若くて頭の回転が速いやつはみんな*ねばいいんだ。

公式チュートリアル文書

もっとまともなチュートリアルはないのか…と探した結果、普通に公式にありました。

これを上から4つまでやります。実際にVisualStudioに打ち込んで動作を確認します。色々とためになります。
これでちょっとかけそうだな?! という気になります。

でも書けないのである

魔法陣問題を解くには順列組合せを解く関数を実装しなければいけないのですが、ネット上に転がっているソースコードカンニングしても、すぐに分からない演算子やら謎の概念やらで混乱してしまいます。要するに公式チュートリアルではまだ網羅されていない要素がまだまだ残っているということですな。
このあたりで自分のIQの低さに鬱状態になります。ていうかlispでかかせてくれよ。放射氏は美しい世界に帰りたいよ。

もう日本語じゃなくていいや

さらに根気よく探してみると、充実すぎるチュートリアル+ブラウザ上で挙動確認できるすごいサイトがあるではありませんか。

  • Try F# ← ここの「Learn」からスタート

英語だけど平易な文章で書かれているので、そこそこなんとかなります。日本語の公式チュートリアルとは比較にならないほど丁寧に幅広い要素が網羅されています(クロージャーとかちゃんと教えてくれる)。何より動作確認をその場で簡単にできるのが助かります。
これまでよくわかっていなかった色々な要素がスコーンと頭に入ってきました。ようやくF#と仲良くできそうな気がする!

いい本があればなあ

F#の解説書って日本語の物は発行年が最新でも2011年なんですね。読んでみたくてもそのあたり購入を躊躇します。でもtryfsharp.orgも2012年ぐらいにできたものらしいし、そこまで問題でもないのか。
Programming F# 3.0が邦訳されてたらなー。

本当はやるならHaskellと思っていたんだけれど

tryfsharp.orgのチュートリアルが分かりやすすぎて楽しすぎて、もうlispやっちゃってるしそんな似たような言語いくつも覚えても仕方ないから、このままF#と付き合っていってもいいか…と、よくわからない覚悟が決まりました。

ちなみに魔法陣問題はまだ解いてない。チュートリアルが楽しすぎて戻ってこれないんだよ(言い訳)
魔法陣問題はこの本に載っていて、最終的にこの本の問題をすべてF#で解かなければいけないのだそうです。命令なので従わなければいけないのです。

アルゴリズムパズル ―プログラマのための数学パズル入門

アルゴリズムパズル ―プログラマのための数学パズル入門

結論

F#やるならTry F#に行け。