タグ

2010年10月27日のブックマーク (1件)

  • Prologで遅延実行 - negationの日記

    組み込み述語で「freeze(変数, 実行部分)」という述語があるらしい。この述語は遅延実行を実現してくれる。遅延実行とは、「変数の中身が決まるまで、実行部分の実行はお預け」という機能。 これを使うと何ができるかというと、例えば ?- Y is X*2, X=1. は、「*」の計算が実行できないので、SWI-PrologならExceptionを吐く。そこで ?- freeze(X,(Y is X*2)), X=1. とすると、Xの中身に1が入るまで、(Y is X*2)の実行がサスペンドされる。そしてX=1となった後に、サスペンド部分が実行され、Y=2になるというもの。これはいい。 なお、不定変数が2つ以上はどうすんの?とか思うかもしれないが、 ?- freeze(Z,freeze(X, (Y is X*Z))), Z=2, X=3. とすれば多分できるはず。 Constraint Log

    Prologで遅延実行 - negationの日記
    suireN
    suireN 2010/10/27
    freeze