「制約論理プログラミング (Constraint Logical Programming)」は論理型言語 (たとえば Prolog) に「制約プログラミング (Constraint Programming)」の機能を追加したものです。SWI-Prolog の場合、標準で Constraint Handling Rules (CHR) がサポートされています。CHR はユーザ定義の制約を記述するためのプログラミング言語です。この他に、制約プログラミング用のライブラリ (clpb, clpfd, clpqr) が用意されていて、ライブラリをロードすることで、それらの機能を使用することができます。
M.Hiroi は 小屋畑さん からライブラリ clpfd のことを教えてもらったのですが、それまで制約プログラミングの経験はまったくありませんでした。そんな M.Hiroi でも、clpfd を使うと簡単にプログラムを作ることができ、なおかつ実行速度も高速でした。これには M.Hiroi も大変驚きました。小屋畑さんに改めてお礼申しあげます。
本ページは初心者でも簡単に扱うことができる (と思われる) ライブラリ clpfd をメインに、簡単なプログラムを作りながら制約プログラミングについて勉強していきたいと思っております。なにぶんにも初心者が作るプログラムなので、おかしなところがあるかもしれません。勘違いや間違いなど、お気づきの点がありましたら、ご指摘いただけると助かります。たいしたことはできませんが、よろしければお付き合いくださいませ。
『制約論理プログラミング超入門』の著作権は筆者「広井誠 (Makoto Hiroi) 」が保持します。無断使用や無断転載は禁止いたします。『制約論理プログラミング超入門』で作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は、出典を明記してくださるようお願いいたします。
ただし、これらのプログラムは無保証であり、使用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi) 」は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。