Sendai Hackathon#01

やりましたで。8時間近く?
自分のやつは本格的な実装時に各種つかう機能の理解の為に、まずは単機能の簡単なアプリを書き上げました。時間内に一つ出来たので、そこそこ進んだ感じ。
id:h_sakuraiさんのは、h_sakuraiさんのブログに投稿されてた記事を査読しました。
前回と同じく、書かれたコードと文章を私が読んで、こういうの入れるともっとわかりやすいんじゃとか、こここんな風にわかんないですと突っ込む感じで進行。
字句解析構文解析と、2分木のイメージを書いてもらったりと補足してもらいながら読み進めていきました。
が、意味解析の項での再帰呼び出しで腑に落ちず、メモリ上のイメージを説明してもらったりで、時間を費やしてしまいました・・・。
何が腑に落ちなかったのかというと、再帰時、どの時点で値が計算されて確定してるかよくわかってなかったんですね
1.2

#exapmle 再帰で行う階乗計算
def fact n
  if n == 0
    1
  else
    fact(n-1) * n # この時点で逐次値が計算されてるの? よくわからないという><
  end
end

puts fact 3 #=>6

んで、スタックに積み上がってって、ていう説明を聞いて、なんとか一段わかったかなと。うううう。*1
h_sakuraiさんの書こうとしてるものは再帰の理解が必須なので、もっと私の精進が必要な状態です。数こなさないと。次回までに精進したいとおもいまっす><

と、まあこんな感じの#01でした。次回#02は10月4日(日)14時からです。


おまけ?
再帰で書くメリットってなんだべ?ループ使うよりシンプルに書けるって事なのかな?
あと、なんでもいいからRubyで階乗書いてみって言われたら多分自分ならこう書く。

def fact n
  (1..n).inject{|r,i| r*i }
  #(1..n).inject(:*)
end
puts fact 3 #=>6

*1:お勉強の為なので最適化がとかいわないでね>