このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

これはひどい誤解だ -- フローチャートは手続き型…だってぇー?!

昨日の記事「フローチャートを復権させよう -- 2020年代のプログラミングへ」のごとき内容は、僕は何度も繰り返し書いています。昨日の記事のなかに過去記事への相当数のリンクがあることからも、それは分かると思います。もう一度代表的な過去記事を挙げれば:

というわけで、僕にとっては定期ポストみたいなものです。年に一,二度はこのことを言っておきたい、みたいな。

過去に書いた、フローチャート、トレース付きモノイド圏、goto文、継続などの記事はあんまりウケなかったのに、なぜか昨日の記事はブックマークもアクセスも集めたようです。不思議だ。「正規表現」のときみたいに誰かが言及したのかな?

それはそうと、ブックマーク・コメントのひとつに:

フローチャートは手続き型しか記述できない。同時性や格納形式の相手が出来ない

これって、3,40年前の評価ですよね*1

時代は変わったのに、「フローチャートってダメなんだよね」とか根拠もなく盲信しているのって、なんなの?

僕が参照している資料のどれかひとつでも眺めれば(読まなくてもいいです)、「手続き型しか記述できない」って言葉はまず出てこないでしょう。例えば、長谷川真人(はせがわ・まさひと)さんのスライドのはじまりのほう(9枚目)は次のような文章です。

再帰プログラムの不動点意味論

再帰プログラム、たとえば階乗を計算するプログラム

    fact(x) ≡ if x = 0 then 1 else x*fact(x - 1)

は、以下の汎関数 F の不動点として理解することができる:

    F(f)(x) ≡ if x = 0 then 1 else x*f(x - 1)

すなわち fact = F(fact) となる。

で、絵が登場している24枚目は…、これは絵が眼目なので画像で引用しましょう。

letrecって「手続き型」っすか? そもそも手続き型だの関数型だのって分類が意味あるの? 党派的活動が好きな人が看板に使っているだけのような気がしますが*2

「同時性や格納形式」ってのは、なにを意味するかハッキリしないのですが、並列実行や非決定性なら普通に絵に描けますよ。描画法が古くさい(伝統的な)so-called アクティビティ図でも、同期バーとかフォーク/ジョインポイントとか呼ばれているアイコンがあるようですし。非決定性の絵については、例えば「非決定性プログラミングだって絵を描いてみれば一目瞭然」を参照。

ストレージに関する扱いは、例えば「ストレージの線形代数: 泥臭いデータ操作の洗練された定式化」を見てください。ストレージ操作を表現するモノイダルスタンピングモナドの絵なら(手描きで汚いですが):

もう一度繰り返し言いますが、フローチャート -- プログラムのpictorial/graphical/diagrammatic/geometricな表現と言ったほうが適切かもしれませんが -- の意味論は面目を一新しているのであって、時代は変わっているのです。いつまでも、3,40年前の悪印象を引きずるのはやめましょうよ。

*1:きちんとした評価とは言えなくて、単なる印象でしょうけど。

*2:異なる計算モデル/異なる構文フレーバーという区別はあるでしょうが、圏同値や随伴ペアで適切な対応が付いてしまうと、区別する意識/意義は薄らいでしまいます。