今日の記録 2020/6/11

仕事

Web のデザインを考える時に、何かがおかしいのは分かるのだが、何を直せば良くなるのかは分からない、ということがよくある。まず第一に、最初にデザインを考えて、次にそれをコーディングするべきで、実装しながらデザインを考えるのはあまりに難しいのでやるべきではない、ということを割と最近になって理解した。だが、どうしても急ぎで、とりあえず作りながら考えようということになった時に、部分的に作ってしまったサイトを使って、一時的にデザインに集中できるように、各要素の配置を変えたりできるような仕組みが欲しい。少しデザインを変えてみるために CSS を書き変えて、デザインを見て、またCSSを書き変えて、ということをするのはあまりに面倒でつらい。そういう何か Web アプリケーションのようなものが無いだろうか。もしないならこれを作れると便利な気がする(HTMLとCSSを丸コピすれば、そのサイトが再現できて、各要素の配置をドラックなどで移動することができる、というようなもの)。


勉強した

プログラミング Erlang

昨日の続き。 gs ライブラリが見つからない問題でいろいろ検索したがまず直接的な解決方法は見つからなかった。そして以下のサイトに、gsライブラリがErlang/OTPに含まれている、というような文章があった。

Erlang sources for the gs application in the Erlang/OTP system.

現在の Erlang/OTP のバージョンは23であるため、公式ドキュメントに書かれていた以下の文章の通り既に削除されている可能性が高そうだった。

GS is deprecated and will be removed in the 18.0 release.

こうなると、 GSでない代わりのグラフィカルシステム的なものについて調べて、この本の中でGSがやっていることと同じことをできるようになる必要がある。かなり大変そうなのでここは諦めて、次からは第12章に入るとする。


みんなのデータ構造 - P125

問6.4 ノードuを根とする部分木の大きさを計算する再帰的でないメソッドsize2(u)を実装せよ。
前に引き続き Erlang で実装しようと思うのだが、Erlangで再帰を使わないで書くというのはかなり変な状況だなあと思いつつ、将来何かの役に立つかもしれないので調べてみることにした。
 まず、 for文がそもそも存在しないことを思い出す。この本のP37の下の方に以下のようにあった。

Erlang には for ループがないので作ってみることにする:

そしてこの for 文に関しても、この関数自体が再帰しているので、これを使っていいのかまず怪しい。 if 文に関してもパターンマッチを使って表現することが多いのでもしかして存在しないのかと心配になったが、if文はあった。とはいえ変数を更新するような for が無い場合は、ツリーを以下のように表現すると、再帰を使わずにサイズを求めるには幅(または深さ)優先探索を実装する必要がありそうだ。

{node, 1, {node, 2, {node, 4, nil, nil}, nil}, {node, 4, nil, {node, 8, nil, nil}}},

ただ、その場合にキューを実装するにあたってこれについても再帰を使うことを禁止するとなると、非常に大変そうだ。多分プロセス辞書を使えば実装できるとは思うのだが、これを使ってまで実装するのは何か間違っている気がするので、こちらも断念する。

以下は、以前実装した再帰版のsize関数だ(テストのためにeunitを使用している)。

t_size({node, _, nil, nil}) -> 
   1;
t_size({node, _, Left, nil}) ->
   1 + t_size(Left);
t_size({node, _, nil, Right}) ->
   1 + t_size(Right);
t_size({node, _, Left, Right}) ->
   1 + t_size(Left) + t_size(Right).

t_size_test() ->
   Tree = {node, 1, {node, 2, {node, 4, nil, nil}, nil}, {node, 4, nil, {node, 8, nil, nil}}},
   5 = t_size(Tree).

再帰ありだとこんなに簡単に書ける(末尾再帰で書こうとすると、ツリーが二方向に分かれるため、これもプロセス辞書を使うような実装方法しか思い付かなかった)。

一通り Erlang で再帰を使わないという制限のもとでどうすればいいかを調べてみたが、殆んど何も書けないのではないかという結論になった。


この記事が気に入ったらサポートをしてみませんか?