第2羽 関数を愛した言語と鉄道指向に愛された言語
この記事はごちうさ住民 Advent Calendar 2014の2日目です。
あとタイトルは内容にあんまり関係ありません。
みなさん、心ぴょんぴょんしてますか?
今日は、鉄道指向を使って心ぴょんぴょんしてみたいと思います。
まずは、鉄道指向プログラミングの翻訳記事を参考に、鉄道指向で用いるResultモジュールを定義します。
type ('a, 'b) t = Success of 'a | Failure of 'b let succeed x = Success x let fail x = Failure x let either successFunc failureFunc = function | Success s -> successFunc s | Failure f -> failureFunc f let plus addS addF f1 f2 r = match f1 r, f2 r with | Success s1, Success s2 -> succeed @@ addS s1 s2 | Failure f1, Success _ -> fail f1 | Success _ , Failure f2 -> fail f2 | Failure f1, Failure f2 -> fail @@ addF f1 f2 |
続いて、こころぴょんぴょんする関数を定義していきましょう。
let failOnMod n' msg n = if n mod n' = then Failure msg else Success n let aa = failOnMod 3 "あぁ^~" let kokoro = failOnMod 5 "心が" let pyon = failOnMod 7 "ぴょんぴょんするんじゃぁ^~" let (&&&) = plus const (^) let gochiusa = aa &&& kokoro &&& pyon >> either string_of_int id let () = List.iter (gochiusa >> Printf.printf "%s\n") (1--105) |
一部定義をすっ飛ばした関数がありますが、些細なことなのでUtil.mlのソースを見て下さいね。
では、さっくりMakeして実行してみましょう。
$ make make[1]: Entering directory `/home/kokuyou/repos/ocaml/gochiusa' ocamldep Main.ml > ._d/Main.d ocamldep Result.ml > ._d/Result.d ocamldep Util.ml > ._d/Util.d make[1]: Leaving directory `/home/kokuyou/repos/ocaml/gochiusa' make[1]: Entering directory `/home/kokuyou/repos/ocaml/gochiusa' ocamlc -c Util.ml ocamlc -c Result.ml ocamlc -c Main.ml ocamlc \ \ -o gochiusa \ Util.cmo Result.cmo Main.cmo make[1]: Leaving directory `/home/kokuyou/repos/ocaml/gochiusa' $ ./gochiusa 1 2 あぁ^~ 4 心が あぁ^~ ぴょんぴょんするんじゃぁ^~ 8 あぁ^~ 心が 11 あぁ^~ 13 ぴょんぴょんするんじゃぁ^~ あぁ^~心が 16 17 あぁ^~ 19 心が あぁ^~ぴょんぴょんするんじゃぁ^~ 22 23 あぁ^~ 心が 26 あぁ^~ ぴょんぴょんするんじゃぁ^~ 29 あぁ^~心が 31 32 あぁ^~ 34 心がぴょんぴょんするんじゃぁ^~ あぁ^~ 37 38 あぁ^~ 心が 41 あぁ^~ぴょんぴょんするんじゃぁ^~ 43 44 あぁ^~心が 46 47 あぁ^~ ぴょんぴょんするんじゃぁ^~ 心が あぁ^~ 52 53 あぁ^~ 心が ぴょんぴょんするんじゃぁ^~ あぁ^~ 58 59 あぁ^~心が 61 62 あぁ^~ぴょんぴょんするんじゃぁ^~ 64 心が あぁ^~ 67 68 あぁ^~ 心がぴょんぴょんするんじゃぁ^~ 71 あぁ^~ 73 74 あぁ^~心が 76 ぴょんぴょんするんじゃぁ^~ あぁ^~ 79 心が あぁ^~ 82 83 あぁ^~ぴょんぴょんするんじゃぁ^~ 心が 86 あぁ^~ 88 89 あぁ^~心が ぴょんぴょんするんじゃぁ^~ 92 あぁ^~ 94 心が あぁ^~ 97 ぴょんぴょんするんじゃぁ^~ あぁ^~ 心が 101 あぁ^~ 103 104 あぁ^~心がぴょんぴょんするんじゃぁ^~ |
実に心がぴょんぴょんしますね!!!
このソースコードはGithubのリポジトリに置いてあるので、どこでも(GitとOCamlさえインストールされていれば)心ぴょんぴょんできちゃいます。
$ git clone git@github.com:kokuyouwind/gochiusa-railway.git $ cd gochiusa-railway $ make $ ./gochiusa |
ちなみに、このFizzBuzzごちうさ改変ネタは簡約 λカ娘 巻の七で@tanakhさんが書かれた記事「ご注文は依存型ですか?」のパク…リスペクトです。
@tanakhさんもごちうさアドベントカレンダー参加者なのでどんな記事を書かれるのか楽しみですね!
それでは素敵なごちうさライフを!
ぴょんぴょん!
※鉄道指向の説明は(めんどくさくなったことは…わわわ!)内緒なの