Gibt es eine Möglichkeit, Konstanten in Prolog zu definieren?Prolog Konstanten
Ich möchte etwas schreiben, wie
list1 :- [1, 2, 3].
list2 :- [4, 5, 6].
predicate(L) :- append(list1, list2, L).
Die Work-around Ich verwende jetzt ist
list1([1, 2, 3]).
list2([4, 5, 6]).
predicate(L) :-
list1(L1),
list2(L2),
append(L1, L2, L).
aber es ist ein bisschen ungeschickt eine „nutzlose“ Variable wie diese zu binden jedes Mal muss ich auf die Konstante zugreifen.
Eine andere (noch hässlicher) Arbeit um, nehme ich an, wäre cpp in die Bau-Kette aufzunehmen.
(In meinem tatsächlichen Anwendung ist die Liste eine große LUT an vielen Orten verwendet.)
Das ist kein Workaround. Das nennt man Faktenerklärung. Sie erklären die Tatsache, dass "list1/1" ein sukzessives Ziel ist, wenn das Argument "[1,2,3]" lautet. Da es keine Variablen in Prolog gibt, können Sie davon ausgehen, dass jeder "Wert" (Atom oder Term) konstant ist und jede "Variable" (Wertname) eine Konstante ohne Determinit ist. Jede "Variable" (z. B. "L1") kann sogar "(1 + 2 * 3)" enthalten und wird niemals interpretiert, da es sich um etwas wie "(1+ (2 * 3))" handelt Tatsache '(7 ist (1+ (2 * 3)).'). Wenn Sie 'list1' als Argument von append übergeben, wird es als atom interpretiert. Sie können' myappend (list1, list2, [1,2,3 , 4,5,6]). ' – ony
Ich * benutze * fact-declaration als ein Workaround, um keine Konstanten zu haben. – aioobe