konbu's blog

PHP/Ruby/Python あたりが仕事で使っている言語です。プログラミング、学習や教育ネタを書いていきます。

手を動かしてみる

昨日の続き。 本を読みながら、再帰の話と実際に手を動かすところがあったので適当に書いてみた。

本書で話に上がっている zip 関数 (Python にある関数と同じ挙動) を実装してみるという内容で、 自分がどの程度本を読んで理解できているのかを確かめてみた。

tail_zip([], [], Acc) -> lists:reverse(Acc);
tail_zip([X|Xs], [Y|Ys]) -> tail_zip([X|Xs], [Y|Ys], []);
tail_zip([X|Xs], [Y|Ys], Acc) -> tail_zip(Xs, Ys, [{X, Y}|Acc]).

こんな感じ。 使ってる名前は本書の物を流用していたり、 命名規則をそれっぽく使ってるのでこの短さならまぁ同じコードになるかなぁくらいの感想だった。

もう一つは流れが変わらんと思うのでパス。 書いてみて思うのは初パターンマッチは特に違和感無く書ける感じだったし、 パターンマッチのおかげで末尾再帰再帰の書きやすさが上がってる感じだった。

なんだろう、かなり考えたまま書ける感じかと。 ただ、[H|T] のパターンマッチを再帰で書いた時に逆順になるのは未だ慣れないなーと思った。 イメージでは、単にリスト構造の先頭にノードをくっつけていくだけなんだけど、 どうも見た目の印象の所為で後ろに伸びてる錯覚を覚える気がする。 もっと頭を訓練しないと。

末尾再帰とか書いた感想は、書き味は Lisp に通じるものがあるなーと感じた。

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!