SWI-Prologには、常に失敗し、マシンがバックトラックするのを防ぐ組み込みの述語がありますか?プログラムの実行をすぐに停止します(これは何をfail/0
しませんか)?カットは使えますが、好きではありません。
そのようなこと!, fail
をすることは私にとって問題ではありませんが、私が望むことを達成するために、私はより多くの場所でカットを使用する必要があり、これは私が好きではないことです。
SWI-Prologには、常に失敗し、マシンがバックトラックするのを防ぐ組み込みの述語がありますか?プログラムの実行をすぐに停止します(これは何をfail/0
しませんか)?カットは使えますが、好きではありません。
そのようなこと!, fail
をすることは私にとって問題ではありませんが、私が望むことを達成するために、私はより多くの場所でカットを使用する必要があり、これは私が好きではないことです。
例外を使用できます。あなたの質問に基づいて-それは役立つはずです。リンクを参照
何かを達成するために明示的に設計されたメカニズムを使用できますが、それが気に入らないのですか?
カットフェイルのシンタックスシュガーであるnotをいつでも使用できます
2つの選択肢が思い浮かびます。
backtrack(true)
制御するコードにまたは用語を渡しbacktrack(false)
、作成している述語の定義でそれを解釈して、に設定されている場合はすぐに失敗し、に設定されている場合はbacktrack(false)
続行しますbacktrack(true)
。これは実際にはバックトラックを防ぐものではないことに注意してください。高速障害を有効にするだけです。プルーフツリーが深い場合でも、これにより、バックトラックで特定のコードが実行されないようにするための迅速な方法が提供されます。個人的には、以前は両方の方法を使用していました。最初の方法はコードを書く前に必要性を予測したもので、後者はまだ使用していません。
残念ながら、それがカットの目的です。