Ich versuche Prolog zu lernen. Ich sah dieses Skript:Holen Sie sich eine von vielen möglichen Lösungen in Prolog
:- use_module(library(clpfd)).
puzzle([S,E,N,D] + [M,O,R,E] = [M,O,N,E,Y]) :-
Vars = [S,E,N,D,M,O,R,Y],
Vars ins 0..9,
all_different(Vars),
S*1000 + E*100 + N*10 + D + M*1000 + O*100 + R*10 + E #= M*10000 + O*1000 + N*100 + E*10 + Y,
M #\= 0,
S #\= 0.
Quelle: https://github.com/Anniepoo/prolog-examples/blob/master/sendmoremoney.pl
ich es laufen wie so und eine Ausgabe erhalten:
$ swipl -q -s sendmoremoney.pl
?- puzzle(X).
X = ([9, _G2009, _G2012, _G2015]+[1, 0, _G2024, _G2009]=[1, 0, _G2012, _G2009, _G2042]),
_G2009 in 4..7,
all_different([9, _G2009, _G2012, _G2015, 1, 0, _G2024, _G2042]),
91*_G2009+_G2015+10*_G2024#=90*_G2012+_G2042,
_G2012 in 5..8,
_G2015 in 2..8,
_G2024 in 2..8,
_G2042 in 2..8.
Es sieht so aus, ist mir eine Reihe möglicher Werte geben für Jeder Brief. Aber wie kann ich eine einzige Lösung erhalten, bei der jeder Buchstabe einem der möglichen Werte zugeordnet ist? Scheint wie eine sehr grundlegende Frage, aber ich kann es nicht herausfinden.
's (X)' es herauszufinden, und in der Dokumentation zur Anbindung! Viele Beispiele, die Sie im Internet finden, einschließlich desjenigen, mit dem Sie verlinkt haben, werden aus der CLP (FD) -Dokumentation herausgerissen, aber es fehlt ihnen der richtige Kontext und sie verwenden schlechte Praktiken. Lesen Sie zuerst die Dokumentation und dann die offiziellen Informationen, um die Fehler in anderen Texten zu finden! – mat
@mat, Sie scheinen zu verschmelzen * CLP (FD) * (ein theoretisches Konzept und Thema des * clpfd * -Tag) und Implementierungen namens * clpfd * (von denen, zum Verwechseln, gibt es zwei ganz verschiedene, SICStus Prologs und SWI /? - Prologs). Das Beispiel "send-more-money" stammt aus dem 1989 erschienenen Buch * Constraint Satisfaction in Logic Programming * von Pascal Van Hentenryck und hat seither in jedem Text auf CLP (FD) geringfügige syntaktische Anpassungen erfahren. Wenn es von irgendwoher abgezockt wird, dann von dort ... – jschimpf
Ja, das Beispiel wird auch woanders verwendet. Ein Link zu anderen und besseren Dokumentationen wäre genauso gut gewesen. In diesem konkreten Fall sehen Sie bitte die konkrete Syntax, die verwendet wird, um zu sehen, wo das Beispiel kopiert wurde. – mat