18:02:27
icon

20:18:39
icon

#TaPL の第4章、普通に #Rust でも実装できそうだなと思ったので #Haskell だけでなくRustでも実装してみた。Rust慣れしていないので(コメントないのは抜きにして)Rustらしい書き方かどうかはわからんけど。 #プログラミング play.rust-lang.org/?version=stabl…

20:28:05
icon

実装の一部間違えちゃってた(succ nvのときにfalseとすべきところをnvにしてた)。てへぺろ☆ play.rust-lang.org/?version=stabl…

20:31:39
icon

iszero (succ nv)です。iszero (succ nv) → falseとなるべきなのですが、iszero (succ nv) → nvになっちゃってました。

20:44:27
icon

ちなみにコードでは、「TmIf(TmZero, TmZero, TmPred(TmSucc(TmZero)))」と出力されてますが、これは条件部がブール値でないために行き詰まり状態となっていてこれ以上評価できないのでこれで正しいです。

22:37:47
icon

succ (iszero nv) → succ v及びpred (iszero nv) → succ vとならなかったので修正しました。 #Rust に合わせるの、難しい。これで今度こそ大丈夫なはず。 #プログラミング play.rust-lang.org/?version=stabl… twitter.com/opaupafz2/stat…

22:39:22
icon

pred (iszero nv) → pred vの間違いです、ごめんなさい・・・。

22:47:56
22:49:43
icon

最終版はこれです。 twitter.com/opaupafz2/stat…

23:09:25
icon

#Rust はまずボクシング(スポーツではない)されないことが前提だから、パターンマッチをするとき、ボクシングされたものだとかまでは考慮しないので、まずそこが #TaPL 第4章の実現を難しくしてるのよな。たとえば #Haskell ではeval1 TmIf(True, t, _) = Just tと書くところを、-> #プログラミング

23:09:28
icon

RustではTerm::TmIf(ref t1, ref t2, ref t3) => match &**t1 { Term::TmTrue => ...}と書かなければならない。なぜならt1, t2, t3はボクシングされているからね。

23:18:21
icon

#関数型言語 の再帰型やパターンマッチングの融通さもある程度オートボクシングに助けられているところがあるので、それがサポートされていないRustでは少し書き方を変えなければならない。 第4章はオートボクシングがないときついという話を聞いたが、その通りだなと思った。

23:20:56
icon

まぁ、そのうえで「オートボクシングがないならBox<T>型使えば良いんじゃね?」って思ったからRustで実装しようと思ったわけだが。

23:27:27
icon

match &**t1←これ自分のコードではそうではないので間違いだけど、これでも動くから別に良いや。

23:48:25
icon

ぶっちゃけ、俺的にはパワハラでジサツしちゃった件も某学校の凍タヒ事件もほぼ同じでしょ。こういった明らかな加害者を守る法律なんて完全になくなればいいのにね。 子どもの未来を潰したくないとか言うけど、加害者が被害者の未来を潰してるんだよなぁ・・・