Ich stimme @dasblinkenlight und @mbratch zu. Außerdem denke ich, dass es hilfreich ist, in grünen Schnitten und roten Schnitten zu denken.
Ein grüner Schnitt ist einer, der das logische Verhalten des Programms nicht beeinflusst, nur die Leistung. Sie sind ein Weg für Sie, Prolog zu sagen, dass Sie wissen, wenn es weitergeht, wird es keine Früchte tragen. Grüne Schnitte sind nie notwendig -sie verbessern nur die Leistung. Es gibt noch so viel zu lernen, wenn Sie zum ersten Mal Prolog lernen. Es scheint nur so, als ob Sie zusätzliche Komplexität für einen kleinen Vorteil hinzufügen würden.
Ein roter Schnitt beeinflusst das Verhalten des Programms. Wie @mbratch sagte, werfen neue Benutzer häufig Schnitte um, um die Ausgabe "aufzuräumen". Neue Benutzer behandeln die Prolog-Abfrageaufforderung häufig als die Benutzeroberfläche für ihr Programm. Diese Kürzungen machen ihre Prädikate weniger allgemein und weniger nützlich im Prozess, die Ausgabe schöner zu machen. Es gibt auch einige Alternativen, die klarer sind, wie once/1
, die Ihnen ein einziges Ergebnis gibt. Experten verwenden rote Schnitte sehr vorsichtig - es gibt Situationen, in denen es viel effizienter ist als ein logischer Ansatz - aber wenn Sie Zugriff auf eine rein logische Formulierung haben, ist es vorzuziehen. Oft haben Prädikate mit Fehlern in der Verwendung von Kürzungen Probleme mit der "Rückwärts-Korrektheit", die später auftreten, wenn Sie vom Prädikat als Teil anderer Prädikate abhängig sind. Diese können schwer zu debuggen und zu beheben sein.
Ich bin mir nicht sicher, ob ich sie eine "Sünde" nennen würde, aber ich stimme meistens mit Ihrem Professor für Anfänger überein. Es ist am besten, wenn Sie erfahren, Probleme logisch zu lösen, ohne den Schnitt zu verwenden. Dann kann der Schnitt später eingeführt werden, wenn Sie ein besseres Gefühl dafür haben, was einfach ist und was schwer ist. Wenn Sie es zu früh verwenden, sind Sie darauf angewiesen, dass es eine Krücke für die prozedurale Programmierung ist.
Es gibt nichts besonders falsch mit ihm, mit der Ausnahme, dass Ihre Programmlogik wird schwieriger zu folgen. In gewisser Hinsicht bringen Kürzungen und Aufgaben Ihr logisches Programm einem imperativen Programm näher - etwas, das Sie unbedingt vermeiden sollten, wenn Sie Prolog verstehen wollen (im Gegensatz zum einfachen Bestehen des Kurses). – dasblinkenlight
Schnitte sind ein Werkzeug wie alles andere, das für den Job passend ausgewählt werden muss. Ihr Kursleiter empfiehlt sie, weil Anfänger sie oft als schnelle Möglichkeit verwenden, ihre Ausgabe "ordentlicher" zu machen, indem sie keine zusätzlichen Lösungsversuche zeigen, wenn sie tatsächlich Szenarien sehen, die sie wirklich sehen wollen. Ohne es zu wissen, haben sie Lösungen abgeschnitten, die sie vielleicht in einem anderen Fall wollen. Sie sollten daher nicht als eine Möglichkeit verwendet werden, die Ausgabe zu "vernetzen", sondern als eine sorgfältig durchdachte Möglichkeit, einen Auswahlpunkt in der Logik zu eliminieren. – lurker
Wenn Sie auf bestimmte Probleme stoßen, bei denen Sie das Gefühl haben, dass Sie einen Schnitt verwenden müssen, können Sie sie als Fragen auf StackOverflow.com veröffentlichen. Die Frage stellen: "Wie kann ich diesen Code ohne Schnitte machen?" ist eine gute Prolog Frage zu stellen. :) – lurker