« リアルとかバーチャルとか | メイン | 学務システム »

2008年02月12日

楽譜とプログラム

先日、とある音楽CDを購入しました。少々お値段は張ったのですが、CD3枚組の立派な装丁で、珍しいことに楽譜まで付いてきました。 私は音楽は専ら聴く側で、楽譜などはほとんど読めません。が、記憶の底から昔音楽の授業で習った知識を引っ張り出しながら楽譜を眺めているうちに、あることに思い至りました。 楽譜は、つまりプログラムなのです。

プログラム (正確には手続き型言語のプログラム) は、主に次の3つの論理構造で記述されます。
  1. 順次実行: プログラムされた通りに逐一処理を行っていく
  2. 選択実行: ある条件を満たしているなら、ある処理を行う
  3. 反復実行: ある条件を満たしている間、ある処理を行う
そして楽譜もまた、このような性質を持つ記号で記述されているのです。
  1. 順次実行: 音符や休符、強弱記号など
  2. 選択実行: n番括弧など
  3. 反復実行: D.C.やD.S.、||: :||など
Coda のような上に当てはまらないような例もありますが、多くのプログラム言語では同等の機能を持つ制御文を見つけることが出来ます (C言語では if と goto といったところでしょうか)。

歴史的に重なるところがない楽譜とプログラム言語がここまで似ているのは、ただの偶然ではないでしょう。 この論理構造が柔軟で直感的に理解しやすいがための、必然の一致に違いありません。
さて、先ほど「正確には手続き型言語のプログラム」と言い直したように、今日ではプログラム言語は手続き型言語のみにとどまりません。 Lisp や Haskell といった関数型言語、Prolog のような論理型言語が生まれ、それぞれがそれぞれの有用性を示しています。 それでは、もし楽譜を関数型言語のように書き表してみたら? ひょっとしたら面白いものが生まれるのかもしれません。 明日は Haskell を勉強してみましょうか。

担当: 田山 (画像は何度も聴いたのに楽譜を見るまで7/8拍子だと気付かなかった曲)

投稿者 beko : 2008年02月12日 18:00 | save to del.icio.us このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://aizu.nowhere.co.jp/mt/tkevn244.dir/6541

コメント

コメントしてください




保存しますか?