2010-12-16 20 views
2

Ich habe dies:GNU Prolog - Multiplikationstabelle

:- dynamic(times/3). 
mult :- mult([0,1,2,3,4,5,6,7,8,9]). 
mult(Num) :- 
    append(L1,[X|R1],Num), 
     append(L2,[Y|R2],Num), 
      Prod is X*Y, 
      assertz(times(X,Y,Prod)),fail. 

Gibt es einen besseren Weg, dies zu tun. Erstellen Sie eine Multiplikationstabelle pro Sagen mit den Zeiten (X, Y, XY) Fakten.

Während dies funktioniert, habe ich mich gefragt, ob es einen Weg gibt, es ohne das Scheitern zu tun, denn wenn ich das Scheitern nicht habe, kommt es nur wahr an? für mehr Antworten. Ich möchte nur, dass es alle Antworten durchgeht, ohne zu fragen.

Antwort

3

Fügen Sie eine letzte "Fall-Through" -Klausel zu mult/1 hinzu, die immer erfolgreich ist, z. mult (_).

Ihr Anruf an mult/1 wird dann erfolgreich die Multiplikationstabelle erstellen und erfolgreich sein, so dass Sie weitere Subziele danach stellen können.

Es scheint mich natürlich, das mult/1 Prädikat mit Mitglied/2 statt append/3, zu codieren, aber mit einer so kurzen Liste ist es wahrscheinlich nicht eine große Zeitverschwendung.