Frage

Gibt es eine build-in-Prädikat in SWI-Prolog, die immer fehlschlagen und verhindern Maschine aus Rückzieher - es ist das Programm zu stoppen sofort ausführen (dies ist nicht das, was fail/0 der Fall ist)? Ich konnte Schnitte verwenden, aber ich mag sie nicht.

so etwas wie !, fail zu tun, ist kein Problem für mich, sondern um das zu erreichen, was ich will, würde ich Schnitte in mehreren Orten verwenden, und das ist, was, wie ich dies nicht tun.

War es hilfreich?

Lösung

Sie könnten Ausnahmen verwenden. Auf der Grundlage Ihrer Frage - sollte es helfen. Siehe Link

Andere Tipps

Sie können den Mechanismus explizit Hilfe entworfen verwenden Sie etwas erreichen, aber sie tun nicht, wie es?

Sie können nicht immer verwenden, die für Schnitt nicht

syntaktischer Zucker

Zwei Alternativen in den Sinn kommen:

  1. Pass um einen backtrack(true) oder backtrack(false) Begriff durch den Code, den Sie steuern möchten, und interpretieren sie in der Definition der Prädikate Sie schreiben schnell zum Scheitern verurteilt, wenn es zu backtrack(false) gesetzt ist, oder wenn backtrack(true) fortzusetzen. Beachten Sie, dass diese Rückzieher verhindern wird nicht wirklich; es sollte nur aktivieren Fast-Ausfall . Selbst wenn Ihr Beweis Baum tief ist, das eine schnelle Art und Weise zu verhindern, die Ausführung bestimmten Code auf Rückzieher bieten soll.
  2. Verwenden Sie Ausnahmen, wie @Xonix vorgeschlagen (+1). Auslösen einer Ausnahme wird den Beweis Baumkonstruktion sofort beenden und Sie Zeitdaten durch die Ausnahme bis zum Handler passieren können, mehr Ausführung umgehen - es wahrscheinlich schneller sein als die erste Option, aber vielleicht nicht so tragbar sein.

Persönlich habe ich beiden Methoden vor - die ersten, wo ich die Notwendigkeit zu erwarten habe, bevor Sie den Code zu schreiben, wobei die letztere, wo ich nicht.

Schade, dass das, was Schnitte sind für.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top