haskell-jp / mokumoku-online #68

ex.4.29 の対応前後で既存のテストプログラムの結果が同じ、ステップ数が減っているまたは同じであることを確認したので、
色々と突っ込みどころは満載ですが、ひとまず ex.4.29 を完了とさせていただきました。その後、ex.4.30 を解いています。
延長戦、面取りが生えたので勝利
obj :: OpenSCADM Model3d
obj = do
  let (Right r) = sketch do
        a <- point & x 0 & y 0
        b <- point & x 4 & y 0
        v1 <- line & from a & degree 30
        v2 <- line & from b & degree 90
        c <- intersectionPoint v1 v2
        poly =<< traverse (chamfer 0.5 . pure) [a, b, c]
  pure $ linearExtrudeDefault 1 r
山本悠滋です。いつも通りmakeMistakesToLearnHaskellやcabal replの件の続きをします... が、15:30前には出掛けるのであんまりできないかも。
(2014) Bartosz Milewski (Part Three: 17. It's All About Morphism ~)
あとハシゴで 62 日目 - Paint All(★6)
toyboot4e です。 Link-cut tree について調べます。
前回作った自作CADで折りたたみ自転車の転がし輪行用キャスターアダプターくんをデザインしたり足りない機能があったら作り足したりします
S.K.です。少し遅くなってしまいましたが、今週もお世話になります。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial の
4.7 Mark 6: Constant applicative forms and the code store の
続きを進めていこうと思います。
間もなく出掛けるので今日はここまで!
本日のmakeMistakesToLearnHaskellの進捗 https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/5eb730d699619f2f23b58b3d0bda5b6df9b089e2
cabal replの件は、デバッグコードをたくさん追加してみましたがどこが原因かよく分からず:disappointed_relieved:
ファイルの終端の取り扱いが間違っているんだろうけどどこを直せばいいやら。後、同じ行を2回以上処理しているような?
なんかこんな感じのパーツが生えました 便利
Category Theory for Programmers (Part Three: 17. It's All About Morphism ~ 18. Adjunctions) まで読了 恥ずかしながらこれまで随伴の Functors である L と R の理解が足りず 随伴の記号 L ⊣ R に方向性があるがことが疑問だったが η: unit, ε: counit の区別をすればよいとやっと分かった 別の視点を持つのは大事
競プロ典型 90 問 62 日目 - Paint All(★6) 全然見えないトホホ ボールを頂点としアイテムを辺とするグラフに「弱い依存関係」を導入して 一種の「トポロジカル・ソートのようなモノ」を実施すればよいのだが こんな杜撰な計画では実装が出来ない
ex.4.30 の続きを進めていました。
とりあえず実行できるようになりましたが、最初に各スーパーコンビネータのコンパイル結果を表示する際に、名前を表示できていなかったり、結果がリストとなるプログラムは、リスト出力前に終了してしまう、と言った不具合が出ています。
不明点は省略したり都合のいいように考えたりして、無理やり動かせるようにした状態なので、まだまだ先は長そうです。
Link/cut tree について調べていました。なかなか時間がかかりそうです……!
山本悠滋です。いつもどおりmakeMistakesToLearnHaskellやcabal replの件の続きをします。
前回同様出掛けるので早めに終える予定です。
平面スケッチ関数のインターフェースを
instance (Models a) => Models (a, a) where
  type Res (a, a) = (Res a, Res a)
  toList (a, b) = toList a <> toList b <&> fmap (const Proxy)
  fromList [(a, pa), (b, pb)] = (fromList [(a, unsafeCoerce pa :: Proxy a)], fromList [(b, unsafeCoerce pb :: Proxy a)])
  fromList _ = error "fromList: (a, b)"

のような、タプルの型をProxyに保存しつつListにするunsafeCoereceを並べてタプルで取れるようにしていたのをTemplateHaskellを使ってレコードを取れるようにしようかなと考えています
(2014) Bartosz Milewski (Part Three: 19. Free/Forgetful Adjunctions ~)
あとハシゴで 63 日目 - Monochromatic Subgrid(★4)
haskell製CADで作られたパーツを出力するフライング進捗要員のPrusa mk4くんです
S.K.です。少し遅くなってしまいましたが、今週もお世話になります。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial の 4.7 Mark 6: Constant applicative forms and the code store の続きを進めていこうと思います。
本日のmakeMistakesToLearnHaskellの更新:
https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/c380337af4404a8ba7e789d16797821bf3840522
cabal replの件は、前々回くらい(?)から苦労していた、パーサーの仕様を変えてからテストが落ちるようになったのを少し直せましたが、依然としてデバッグしにくくてよくわからん感じです:weary:
出掛けるので今日はここまで!
Category Theory for Programmers (Part Three: 19. Free/Forgetful Adjunctions ~ 20. Monads: Programmer's Definition) まで読了 Free ⊣ Forgetful の随伴は *Mon* ⊣ *Set* に限らず他の随伴に随所に現れるらしい 次いで例のモナモナの monad が Kleisli Category の endofunctor として導入される ご親切に Haskell programmers のために Writer monad を例にとり詳説されている monad は初学者には驚愕の(見たことがナイための)難解さだが そのうちに分かる人には分かる としか言えない
競プロ典型 90 問 63 日目 - Monochromatic Subgrid(★4) バカサーチしか思いつかない(当然の結果 TLE) 空しいので五輪競技観賞に逃避してる
data Hoge = Hoge
  { honi :: Polygon,
    fuwa :: Point,
    poyo :: Polygon
  }

のようなSketchから返す型が入ったレコード型から
data HogeRes = HogeRes
  { honi :: Model2d,
    fuwa :: Vector2d,
    poyo :: Model2d
  }

のようなOpenSCADに渡すレコード型を生成するくんが生えました
残りの詰め替え処理が重いのでまず何かしらリファクタをするべきかと悩んでいます
先週に続き、ex.4.30 にトライしていました。
先週見つかった不具合のうち、リスト出力が必要なプログラムが出力前に終了してしまう原因は、compiledPrimitives に登録した topCont, headCont のコードを間違えていたことが原因でした。
それぞれの中でお互いを呼び出すときにインデックス番号を指定するのですが、それが逆でした。お恥ずかしい。
そのバグを修正したら、とりあえず既存のテストプログラムは一通り以前と同じ結果が得られました。今回はステップ数も変化なしです。これでいいのだろうかという不安で満たされています。
最初のコンパイル結果表示の際に名前を表示できない不具合はまだ対応できていません。
延長戦 とりあえずほしいやつが生えてコンパイル通ったので勝利
... Replies ...
@msakai has joined the channel
山本悠滋です。いつもどおりmakeMistakesToLearnHaskellやcabal replの件の続きをします。別にやりたいタスクがあるので早めに切り上げるかも
(2014) Bartosz Milewski (Part Three: 21. Monads and Effects ~ )
あとハシゴで 64 日目 - Uplift(★3)
S.K.です。少し遅くなってしまいましたが、今週もお世話になります。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial の 4.7 Mark 6: Constant applicative forms and the code store の続きを進めていこうと思います。
今日はここまでにします。
・makeMistakesToLearnHaskellの更新:
https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/8134ba4329c854c82353e23158b8406a5c545d1a
https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/26af85503e9299a12befcbf3942a28aee2b111b5
・cabal replの件は、前回出くわしたテストの失敗が.cabalファイルのインデントの扱いに起因することに気づいて直してます。インデントの長さを数えると同時にパーサーでインデントの分を消費していたのが混乱の元なので、attoparsecのlookAheadを使うことでインデントの長さを数える際に消費しないようにする作戦で修正しています。
Category Theory for Programmers (Part Three: 21. Monads and Effects ~ 22. Monads Categorically) まで読了 モナドの功徳を挙げて Read / Write / State / Exceptions / Continuations / IO の例を示している 次に圏論的アプローチをしていて Monoidal Categories の Monoid を通して随伴からモナドを見ている いわば舞台裏を覗かせてくれる 数学的にはむしろこちらが本筋なのだろうけど 納得するとは 数々の例を通して説得される事なのか あるいは隠れた本質を理解する事なのか 凡人には前者かも
競プロ典型 90 問 64 日目 - Uplift(★3) 思案投げ首 差分数列を BIT で管理して両端での価変更でかなり対処できるが 最終的に絶対値の和にするところで破綻?
最初にコンパイル結果を表示する際に、スーパーコンビネータ名を表示できない不具合の対応をしていました。いい方法が思いつかなかったので、苦し紛れにかなり安易で姑息な方法を取ってしまいました。
CodeStore型をグローバルフレームのみに変更したのですが、コンパイル結果を表示処理のためだけに、スーパーコンビネータ名と対応するインデックス番号のタプルのリストを、
グローバルフレームとは別にマシンのステートに持たせてしまいました。
最初にコンパイル結果を表示する際は、グローバルフレームのクロージャを順番に処理する際に、インデックス番号からスーパーコンビネータ名を求めて表示しています。
Push Label 命令や Enter Label 命令を実行する際はインデックス番号だけを使って処理するようにはしたのですが...多分テキストの趣旨はこんな対応ではないと思います。お恥ずかしい。
毎回思うけど全然恥ずかしくないですよ!胸張ってやりましょうよ!!
... Replies ...
山本悠滋です。
他に優先したいタスクと並行しつつ、いつもどおりmakeMistakesToLearnHaskellの続きやcabal replの件を進めます。
(2014) Bartosz Milewski (Part Three: 23. Comonads ~ )
あとハシゴで 65 日目 - RGB Balls 2(★7)
S.K.です。少し遅くなってしまいましたが、今週もお世話になります。よろしくお願いします。
Implementing Functional Languages: a tutorial の 4.7 Mark 6: Constant applicative forms and the code store の ex.4.30 の確認から進めていこうと思います。
お久しぶりです。gksatoです。vector に投げたPR https://github.com/haskell/vector/pull/498 (`Mutable.nextPermutation` を高速化して (next|prev)permutation(By)? のうち存在しない3関数を追加する)にbenchmarkとchangelogを足す作業をしようと思います。
本日のmakeMistakesToLearnHaskellの進捗: https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/5ad90033b62805a07ccc5600b6cd7f226556e099
cabal replの件は、ようやく.cabalファイルの必要な箇所をパースするパーサーのテストを全て通せました。次は.cabalファイルを書き換える処理のテストが落ちてるのを直します。
Category Theory for Programmers (Part Three: 23. Comonads ~ 24. F-Algebras) まで読了 コモナドの実例が Stream comonad に如実に表れる sumS, movingAvg 等々 また Store comonad は State monad の双対である 加えて F-algebra が何故高校代数的な表現なのかの説明も明快 そしてついに cata と ana の登場となり面白くなって来た
競プロ典型 90 問65 日目 - RGB Balls 2(★7) 小課題1と2は簡単にクリア 小課題3で壁に激突 これ以上速度を上げるには FFT library が必要 AtCoder Haskell 標準ライブラリーには無い 自作せよと言うのかな?
ex.4.30 について先週行った対応の動作確認をしていました。手元のテストプログラムは一応一通りOKとなりました。
スーパーコンビネータのコンパイル結果を表示する際も、スーパーコンビネータ名を表示しています。
その後、4.8 Summary に描かれていた TIM の最終的なコンパイルスキームの図と、実装を照らし合わせて確認中です。
benchmarkの準備をする関数を途中まで書いただけですね。多分夕食後に続きをします…。
折りたたみ自転車転がし輪行くんのパーツの寸法調整をやっていきます
オレオレCADはhaskell上のDSLではできない仕様(具体的にはこんな感じの逆評価 https://baku89.com/2020/06/26/c-activity )が欲しくなってしまったのでrust+tauri+elmでGUI付きインタプリタを作る感じになりhaskellではなくなってしまいました
"Category Theory for Programmers," Bartosz Milewski が胸突き八丁にさしかかったので小休止 今日は [ 圏論の基礎 計算機科学向け] 米田のレンマ でじっくり復習
あとハシゴで 競プロ典型 90 問 66 日目 - Various Arrays(★5)