制約プログラミング落穂拾い: 2009年2月アーカイブ
さて今回は、制約プログラミングの最大の特徴であり、メリットであるはずの「宣言性」、問題の定義と問題の解法の分離が、ソフトウェア開発の現場でどのような意味合いを持つかを具体的に考えて行きたいと思います。
なお、制約プログラミングのさまざまな機構の実装は処理系により異なります。従って具体的な機構の説明の部分は、あくまでも例示に過ぎないことを予めお断りしておきます。例示にあたっては、(当然のことですが)自分が実装を知っている処理系を前提としています。
宣言的なプログラミングでは、プログラムは問題を解くための処理の手順を書くのではなく、問題に存在する制約、即ち変数の間の関係を記述するだけです。
制約の記述をするためのシンタクスは制約プログラミングの環境により異なりますが、ここでは例えばC言語によるライブラリを想定します。この場合、
制約プログラミングの定義は色々と考えられるでしょうが、恐らく落とすことのできない特徴の一つとして必ず含まれるのは「宣言性」という特徴ではないでしょうか。今回から数回にわたって、「宣言性」について思うところを少し書いてみたいと思います。もっとも「宣言性」は非常に奥の深いテーマですから、ここで触れるのは、実際に制約プログラミングを実用的な問題の解決に使ったり、他人に説明したりした経験から私が個人的に感じたことに限り、また書き方はインフォーマルなものにしようと思います。