第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さんもごちうさアドベントカレンダー参加者なのでどんな記事を書かれるのか楽しみですね!
それでは素敵なごちうさライフを!
ぴょんぴょん!
※鉄道指向の説明は(めんどくさくなったことは…わわわ!)内緒なの