Open2

読者コミュニティ|競プロ盆栽.hs

toyboot4etoyboot4e

宣言的な入力処理

tanakh さんのマクロproconio のように宣言的に入力処理できると格好良いよね、という話題を振って頂きました。

適用でパーサを合成する仕組みは作ったことがあります:

(!c, !x) <- auto @(Char, Int)

一方、 proconioauto 以上に便利です。事前にパースした変数を使って、他の変数のパースの方法を指定できます:

use proconio::input;

input! {
    n: usize,
    m: usize,
    a: [[i32; n]; m] // `a` is Vec<Vec<i32>>, (m, n)-matrix.
}

ここでは 2 次元配列 a のパースに n, m を利用しています。 Haskell でここまで綺麗な書き方をするためには、 Template Haskell が必須ではないかと予想しています。