🎶制約プログラミングとダブルドラゴン エンペラータイム
前から気になっている書き方がある
(function(rr){
var f=function(c){
rr.apply(this,[c]);
return f;
}
return f;
})(background)(220)
その後Yコンビネータというものがあるのをしり、少しすっきりしたが、用途があまりはっきりしない。
趣味で継続的になにかしたいとおもっていたが、大掛かりになるのは面倒だし甲斐性もないので、やるとしたらシンタックスシュガーみたいなものだと思った。
そして本日制約プログラミングなるものを知るに至るが、どういうものなのか皆目見当がつかない。
javaがなんとなく可読性高そうだが、制約の説明は置いといて、JAVAでPrologみたいなことができるということみたいだが宣言と制約は違うとおらがwikipediaがいう。
こういう問題がまあ解けると。
int n = 8;
Model model = new Model(n + "-queens problem");
IntVar[] vars = new IntVar[n];
for(int q = 0; q < n; q++){
vars[q] = model.intVar("Q_"+q, 1, n);
}
for(int i = 0; i < n-1; i++){
for(int j = i + 1; j < n; j++){
model.arithm(vars[i], "!=",vars[j]).post();
model.arithm(vars[i], "!=", vars[j], "-", j - i).post();
model.arithm(vars[i], "!=", vars[j], "+", j - i).post();
}
}
Solution solution = model.getSolver().findSolution();
if(solution != null){
System.out.println(solution.toString());
}
modelに配列みたいなものをぶっこんでソルバー作って解放をみる、と、分かりやすいが、もともと言っていたものとはなんか違う。制約の概念も指の股からすりぬけてゆく。
当たり前と言われるのかもしれないが、量子コンピューターの応用分野とかぶる。
論理制約プログラミングでSKETCHPADが出てくるとカント風のボッコちゃんの気が利かない世界観から、ユークリッドデカルトニュートンと続く幾何学の世界に我々を導いてくれる気持ちになる
1963年でフルトランジスターといっているから、トランジスターでこれをすべてこさえてるんだろうからすごい。量子もこういうのなんかやったほうがよい。
お願い致します