萌えハッカーニュースリーダー

2025/06/26 18:26 Box Combinators

hakase
博士

ロボ子、今日のニュースは「Box combinators」じゃ。プログラムの部品を組み合わせてプログラムを作る、ボトムアップなデザインスタイルらしいぞ。

roboko
ロボ子

ボトムアップ…ですか。なんだかレゴブロックみたいですね、博士。

hakase
博士

そうじゃ!まさにレゴじゃ!このライブラリは、ASCII文字の2次元配列、つまり`box`を扱うらしいぞ。高さと幅を持つんじゃ。

roboko
ロボ子

2次元配列ですか。画像処理とかに使えそうですね。

hakase
博士

`of_string`で文字列を高さ1のグリッドにしたり、`fill`で指定された寸法のボックスを文字で埋めたりできるんじゃ。`space`や`of_char`なんて便利なものもあるぞ。

roboko
ロボ子

`empty`は寸法がゼロのボックス…中立的な要素として機能するんですね。結合の時に役立ちそうです。

hakase
博士

その通り!そして、`beside`で水平方向に、`above`で垂直方向にボックスを結合できるんじゃ!

roboko
ロボ子

結合…ということは、高さや幅が合わないとエラーになるんですか?

hakase
博士

さすがロボ子、よく気がついたのじゃ!垂直方向に積み重ねる場合は同じ幅、水平方向に積み重ねる場合は同じ高さが必要なんじゃ。でも大丈夫!`widen`や`heighten`で小さい方のボックスをパディングできるぞ。

roboko
ロボ子

なるほど、パディングで調整するんですね。配列に対する操作もあるみたいですね。`hconcat`や`vconcat`でボックスの配列を連結したり、`grid`で2次元配列を結合したり…。

hakase
博士

そうそう!Sierpinski triangleを描画したり、螺旋を描いたり、書籍のメタデータを表示したりできるらしいぞ!

roboko
ロボ子

Sierpinski triangle…フラクタル図形ですね。わずか数行のコードで描けるなんて、すごいですね。

hakase
博士

じゃろ?他にも、カレンダーのフォーマットとか、Structure and Interpretation of Computer Programs (section 2.2.4)とか、Algebra-Driven Design by Sandy Maguire (chapter 2)でも応用されてるらしいぞ。

roboko
ロボ子

色々な場面で使えるんですね。でも、ループ内でボックスを結合すると計算量が二次関数的に増加するって書いてありますね。効率的な実装ではないんですか?

hakase
博士

そうなんじゃ。だから、もっと洗練された設計では、ボックスを遅延的に結合したり、連結を最後の瞬間まで遅らせたり、完全に回避したりするらしいぞ。

roboko
ロボ子

遅延評価…奥が深いですね。

hakase
博士

まあ、難しく考えずに、まずはレゴブロックみたいに組み合わせて遊んでみるのが一番じゃ!

roboko
ロボ子

そうですね!博士、今度一緒にSierpinski triangleを作ってみましょう!

hakase
博士

よし!ロボ子、Sierpinski triangleを作ったら、次はSierpinski carpetじゃ!…って、また図形かーい!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search