Is there any way to define constants in prolog?
I'd like to write something like
list1 :- [1, 2, 3].
list2 :- [4, 5, 6].
predicate(L) :- append(list1, list2, L).
The work-around I'm using now is
list1([1, 2, 3]).
list2([4, 5, 6]).
predicate(L) :-
list1(L1),
list2(L2),
append(L1, L2, L).
but it's a bit clumsy to bind a "useless" variable like this every time I need to access the constant.
Another (even uglier) work around I suppose, would be to include cpp in the build-chain.
(In my actual application, the list is a large LUT used in many places.)
list1/1is successive goal if its argument is[1,2,3]. There is no variables in prolog, so you can assume that every "value" (atom or term) is constant and each "variable" (value name) is non-determinitict constant. Each "variable" (ex.L1) can hold even(1+2*3)and it will never be interpreted, because that's term (something like(1+(2*3))and there is fact(7 is (1+(2*3)).). When you passlist1as argument of append it is interpreted as atom. You can definemyappend(list1,list2,[1,2,3,4,5,6]).- ony