みたろーのさんどぼっくす

やってみたあんなことやそんなこととかを、気が向いたらまとめてみるよ。

ほとんどすべてのものはメッセージ / 7つの言語… Io・2日目・の途中

なかなか進まない…ですが、やってみています。

7つの言語 7つの世界

7つの言語 7つの世界

やってみよう

その1

フィボナッチ数を再帰とループ、それぞれの方法で求めよ、という問題。

これはそこまで難しく…*1ない。

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Io/Day2/Fibonacci.io

その2

0除算を受け入れよう、という問題。

これは結局答えを探した。「「割る手続き」がスロットに割り当て済みなら、その手続き自体を、どうにかすれば直接呼べるはず」とか、変な思い込みがあったせいで苦戦。

最初から、別のスロットにオリジナルのスロットの参照先を移しておけばよかったんだね。やれやれ。

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Io/Day2/setNewDiv.io

その3

2次元配列の総和を求める話。といっても、配列はないから、リストでいいのかなと曲解。2次元配列=リストのリスト。

リストの要素の和を求めるメッセージは、もともとあるし、mapもあるし、というわけでこうしてみた。

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Io/Day2/sum2d.io

flattenもあるから、いっそのこと…とやったのがこれ。

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Io/Day2/sumAll.io

その4

とりあえず書いてみた。

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Io/Day2/myAverage.io

…以下の点において、納得してない。

  • 「Number」かどうかの判定方法…これでいいのか?
  • ifのネスト
  • call target だらけ…これは仕方ないのかなぁ…

その5とその6

これもとりあえず書いてみた。

https://github.com/mitaroThanken/seven-languages-in-seven-weeks/blob/master/Io/Day2/TwoDimList.io

…コレジャナイ感をビシビシ感じるのですが…

ここまでのまとめ

本文中のにあるこの記述。

Ioでは,ほとんどすべてのものはメッセージ

call〜に集約されている気がする。あと、メッセージの戻りに対して更にメッセージを送る記述は、日頃使う言語と大きく違う。これはこれで面白いし、一旦理解してしまえば、わかりやすい。

1日目の本文中に、以下の例が挙げられているんだけど、

people select(age > 20) map(address) println

ようやっと、「ああそういうことか」と腑に落ちた感がある。

ここまでで時間切れ。1日分が1日で終わらないという罠…


*1:ループでフィボナッチ数を求める方法を完全に忘れてしまっていて、そこに苦戦した orz