| ゴールを一度だけ成功させる。
!/0
!/0 (Cut) は、一度だけ成功する。探索木の未探査枝は刈り取られる。
もし、Cut がゴールの一部なら、 そのゴールの全選択点は除かれる。全バインディングは固定される。
もし、Cut が、右側(たいてい、本体の最初)にあると、完全なゴールは一度だけ成功する。
Cut の使用は、repeat/0 でのループを作る時にも重要である。なぜなら、!/0 は、ループを抜けた後、このループは バックトラックによって、再訪されない。
!/0 を使うと、プログラムは理解しにくくなる。よって、Cut
はできるだけ使うべきではない。
例
データベースには、以下のようになっているものとする。:
colour(blue).
colour(red).
colour(yellow).
clothing(blouse).
clothing(trousers).
clothing(socks).
| colour(X),!. |
X <- blue の代入で一度だけ成功。 |
| clothing(X),!,colour(Y). |
以下の代入で 3度成功。
X <- blouse, Y <- blue.
X <- blouse, Y <- red.
X <- blouse, Y <- yellow. |
標準
この述語は、ISO-Prolog標準に含まれる。
関連
abort/0,
break/0,
call/1,
fcall/1,
catch/3,
','(conjunction)/2,
';'(disjunction)/2,
fail/0,
true/0,
halt/0/1,
'->'(if-then)/2,
';'(if-then-else)/2,
'\+'(not provable)/1,
once/1,
repeat/0,
throw/1.
|