一部地域で配送遅延が発生しております。到着までお時間をいただきますのでご了承ください。
n月刊ラムダノート Vol.5, No.2(2025)

n月刊ラムダノート Vol.5, No.2(2025)

通常価格 ¥1,600(税込¥1,760、送料当社負担) 特別価格

  • 紙書籍をお届けします(PDFがついてきます)
  • 通常はご注文から2~3営業日で発送します。
  • 年末年始や大型連休など、1週間から10日程度、配送のお休みをいただく場合があります。詳しくはお知らせをご覧ください

計算機好きのための技術解説情報誌

  • エヌゲッカンラムダノート(不定期刊行)
  • 114ページ
  • A5判
  • 紙書籍は1色刷
  • 2025年12月1日 第5巻第2号/通巻11号 発行

n月刊ラムダノートは、nヶ月ごとに刊行される、計算機好きのための技術解説情報誌。コンセプトは「いろんなIT系技術書から1章ずつ選んできた解説記事の集まり」です。今号は2本の記事をお送りします。

#1 do式でわかるモナドとその仲間たち(石井大海/konn)

プログラミングにおける「モナド」は、圏論に由来する難解な仕組みというイメージが先行していることもあって、Haskellのような一部のプログラミング言語でのみ必要とされる特別な機能と捉えている人が多いかもしれない。しかし、モナドを持つ言語に習熟したプログラマーが他の言語を使っていて「モナドがあれば!」と感じることがあるように、モナドは必ずしも特別な一部の言語でのみ有用な機能というわけではない。

本稿では、「状態を持ちまわる逐次実行」というごくありふれた処理を記述するための構文を通して、言語によらずプログラミングで有用なモナドの性質とは何か、なぜ機能するのか、どうすればモナドを使えるのかを示す。さらに、逐次実行に制限を加えることで得られるApplicativeや線型型などのよく知られる便利な構造についても紹介する。

    #2 作りながら考えるエフェクトシステム(近藤亮介/Kory)

    型にはプログラムの性質を静的に表明できるという利点がある。とはいえ、関数が外部との入出力を伴うことや、呼び出しのたびに状態が変化することは、「結果型がIOになる」のようなざっくりとした粒度でしか表明しないことが一般的である。これをより精微に表明できるようにし、関数に許可する作用をトラッキングできるようにする仕組みとして、エフェクトシステムがある。

    エフェクトシステムを実現するには、さまざまな作用を型で区別するだけでなく、それらを組み合わせて実行するための機構が必要になる。本稿では、作用(の記述)と命令を同一視することでエフェクトシステムをアセンブリ言語の処理系としてモデリングできることを明らかにし、それをScalaで実装する過程を通して、プログラミング言語内に独自の言語を埋め込むときの設計、手法、考え方を紹介する。

      執筆者紹介

      石井大海/konn(#1)
      関数型プログラミングと静的型システムの科学計算・数学ソフトウェアへの応用に興味がある。前職では5年間Haskellによるシミュレーションドメイン特化言語の設計開発に携わり、現職ではRustによる数理モデリング言語の設計・開発を手掛ける。15年以上にわたってHaskellを愛用しており、現職で書いたコードも同僚に「Haskellerの書いたRustコード」と評される根っからのHaskeller。

      近藤亮介/Kory(#2)
      数理論理学を中心として、代数や幾何などの数学、および型の理論や形式検証・定理証明などの計算機科学に広く興味を持つ。新卒で入社したアルプ株式会社(現Scalebase株式会社、現在は退職済)でExtensible Effectsを活用したWebバックエンド開発に触れて感銘を受け、ScalaMatsuri 2024にて「作って学ぶExtensible Effects」の題で講演をする。Scala とRustを愛用しつつ、最近は依存型言語にも触れている。https://x.com/Kory__3

      目次

      1. do式でわかるモナドとその仲間たち
       1.1 例で見る「逐次実行」としてのdo式
       1.2 モナドとは「do式が使える構造」である
       1.3 do式でわかるモナド以外のクラス
       1.4 発展的話題:モナドのそっくりさんたち
       1.5 おわりに
       1.6 参考文献

      2. 作りながら考えるエフェクトシステム
       2.1 エフェクトシステムとは何か、なぜエフェクトシステムが欲しくなるのか
       2.2 エフェクトシステムを作るには何をすれば良いのか
       2.3 アセンブリ言語のプログラム片をScalaでモデリングする
       2.4 「終了コード付きプログラム」とプログラム合成
       2.5 モデリングされたプログラムに「意味」を与える
       2.6 命令セットの合併とトランスパイラのパイプライン
       2.7 実際に動作する例
       2.8 結び
       2.9 参考文献