haskell-jp / mokumoku-online #78

S.K.です。遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
5.5 Mark 4: A better way to handle blocking の続きを進めて行こうと思います。
5.5 Mark 4: A better way to handle blocking の続きを進めました。
前回とは別の並列処理テストプログラムとその逐次処理版についても動作確認を行ったところ、一応エラーなく終了して正しい結果が得られました。
Chapter 5 A Parallel G-machine は、ひとまず完了とさせていただき、Chapter 6 Lambda Lifting に進もうと思います。
Competitive programming in Haskell: better binary search: 6題の宿題がありその4つ目 ”Annoyed Coworkers” を考慮中 どのように binary search を使うかが要点 すでに解決済みの3題についても 自明なものから 興味深い使い方まで(実は全然使わないモノまであった!) いろいろあったので慎重に進めている
@ has left the channel
Myxogastria0808
@Myxogastria0808 has joined the channel
Competitive programming in Haskell: better binary search: Brent Yorgey 先生の blog をもとに残りの Kattis の問題を解きます 懸案の ”Annoyed Coworkers” については結果として binary search を使わずに skew heap ベースの priority queue を使うとやっと TLE 地獄から脱出できた これだから油断がならない
@Soma Nakamura has joined the channel
S.K.です。遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
Implementing Functional Languages: a tutorial の Chapter 6 Lambda Lifting を進めて行こうと思います。
外出していて遅くなりましたが、いつもどおりmakeMIstakesToLearnHaskellとHaskell-jp Blogの続きをします。
Competitive programming in Haskell: better binary search: 残り2つの宿題があり "Wonky Pizza" はむしろ数学(極座標の積分)の問題であった ただいま ”AI Jeopardy” を考慮中 二項係数の Pascal の3角形を考えて 各行ごとに二分探索しまた各段ごとにまた二分探索? の方針で実装中 しかし設問の条件 1 <= X <= 10^100 から TLE の恐怖が抜けない
6.2 Improving the expr data type をとりあえず読み終わり、Ex.6.1 にとりかかりました。
元々の pprint や pprExpr はどうだったか確認するために 1.5 A pretty-printer for the Core language を読み返したりして、あまり進めることができませんでした。
自分にとってはかなり難しいですが、引き続き進めて行こうと思います。
Competitive programming in Haskell: Letter Optimization: Brent Yorgey 先生の blog をもとに Kattis の問題を解きます
S.K.です。ちょっと遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
Implementing Functional Languages: a tutorial の Chapter 6 Lambda Lifting の続きを進めて行こうと思います。
昼寝が長引いて遅くなってしまいましたが、いつもどおりmakeMistakesToLearnHaskellとHaskell-jp Blogの続きをやります。
ちょっと早いですが切りがいいのでここまでにしておきます。
Haskell-jp Blogの更新: https://github.com/haskell-jp/blog/commit/ae96bb2442cf38a548300223ddab87c457147038
makeMistakesToLearnHaskellの更新: https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/98fdda15969f52e987d9af5fb8524fa79970f35e
Competitive programming in Haskell challenge: Letter Optimization: この blog には何の解説記事も無くて ただ Kattis 問題 "Letter Optimization" が出題されているだけ 回答は次回だそうで 何とか自力で挑戦してみるも まず問題文が分かりずらく頭に入れるのに四苦八苦した 想定手順以下のとおりで実装中: まず人の手渡し順で人々の topological sort をする 手渡しの依存関係で先祖 i の入出力和を Mi にする その手渡し先 j とその割合 w から i j 間の流量を決定する それを j での入力和 Ij に加える これらを topological sort 順に各人について繰り返す そうすると子孫の入力和 Si はすでに定まっているハズ それで各人の出力和 Uj = min ( Ij, Mj ) が定まる 最後に Si
= Mi となる i を集めて sort したものが解答 かな?
Ex.6.1 を解こうとしましたがよくわからず、Ex.6.2 も同様だったので、6.3 Mark 1: A simple lambda lifter を読み進めました。
ラムダリフタも Mark1 は写経するだけの様で、Ex.6.1 で実装する予定だったプリティプリンタ(pprint)を、既存のもので代替して動かしてみました。
ラムダリフティングを行った結果、局所変数リストが空の let 式が生成されてしまい、そのままではエラーとなりましたが、6.4 Mark 2: Improving the simple lambda lifter の Ex.6.3 で、そのような let 式を削除することになっており、指示に従って mkELet 関数を修正したところ、エラーなく実行されるコア言語プログラムが生成された模様です。

<ラムダリフティング前>
f x = let g = \y. x*x + y in (g 3 + g 4) ;
main = f 6

<ラムダリフティング後>
f x_0 = let
g_1 = sc_2 x_0
in (g_1 3) + (g_1 4) ;
sc_2 x_3 y_4 = (x_3 * x_3) + y_4 ;
main = f 6

理解不十分なまま通り抜けてしまったので、戻って見直そうと思います。
@小原 祥 has joined the channel
HaskellにはWeb APIとツール開発でお世話になりました。今まではScalaで開発をしていましたが、9年ぶりにまたHaskellでお仕事をができればと思っています。最初のステップとして、今日は2025年の最新とされている開発環境の整備を目標にします。よろしくお願いします。
Competitive programming in Haskell: topsort via laziness: Brent Yorgey 先生の blog をもとに Kattis の問題を解きます
すごいHaskell本を読みます。別の勉強会で「モナド則」が話題になり、よく解説されているということでオススメされました。
よろしくお願いします。
S.K.です。遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
Implementing Functional Languages: a tutorial の Chapter 6 Lambda Lifting の続きを進めて行こうと思います。
Competitive programming in Haskell: topsort via laziness 何と先週の宿題 Kattis: "Letter Optimization" の解答がそのまま載っている! 先生の解法は a lazy, recursive Array を用いて(ナルホド) 総所要時間は 0.68 s であった それに対し自分の解は Data.Graph.topSort と STUArray を用いて 0.61 s であった 勝った 別に勝負じゃないけど 用いる手法とライブラリの違いが差を生むことが教訓
今日の宿題は Kattis: "Alien Math" だが Difficulty: Easy 2.3 とあるように簡単 ヤルダケ だった
という事で今日は早いですがこれにて離脱
Full-stack Developer
@Full-stack Developer has joined the channel
山本悠滋です。またお昼寝で遅くなりましたが、いつもどおりmakeMistakesToLearnHaskellとHaskell-jp Blogの続きをやります。
本日は、すごいhs本の「7.6 型シノニム」まで読みました。
こちらのもくもく会ですが、Haskell 以外に PureScript や Lean などの純粋関数型言語の作業を進めても大丈夫でしょうか?
... Replies ...
まだ途中です!
皆さんのネット上の記事のおかげで環境構築作業を無事に終えることができました。ありがとうございました。
本日のmakeMistakesToLearnHaskellの進捗
https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/3cd947e483d1a70d6454424187793b67a6ff1764
Haskell-jp Blogの方は... これからやりますが文章がすぐに思い浮かばない場合は進捗ゼロかも。
... Replies ...
先週確認したテストプログラム

f x = let g = \y. x*x + y in (g 3 + g 4) ;
main = f 6

を使って、ラムダリフタ―の動作を確認していました。
ラムダリフタ―は freeVars, abstract, rename, collectSCs の関数が合成されたものとなっており、各関数の出力結果を確認してました。
(テキストもちゃんと読んで理解しなくては。)
Haskell-jp Blogの進捗。ようやく終わりが見えてきたかな...?
https://github.com/haskell-jp/blog/commit/25da5c61babcf7a9e53e89d50bf3e8e464061d7a