I have reviewed my pack / pac, which is mainly
for closure. About one year ago, once I saw that
the pac broke and took it hard for me to fix, without
investing troubles. However, fortunately recently I happened to notice
that it had not been the case, and in fact, fixing related codes little
by little, now the package seems to work on the latest SWI-Prolog git
better than ever before, with the following prolog flags.
:- set_prolog_flag(optimise, true).
:- set_prolog_flag(qcompile, auto).
:- set_prolog_flag(stack_limit, 44_359_738_368).
For fun, I added a new feature, appication (@) on predicate
cloure and function closure, though for the moment I am not sure
this feature is interesting. Below are some sample queries on
applicatioins without explanations, still hoping some reader
might be interested in them.
- ?- append([1], [2])@X.
X = [1, 2]. - ?- append@[1]@[2]@X.
X = [1, 2]. - ?- append@(:append@[1]@[2])@(:append@[3]@[4])@X.
X = [1, 2, 3, 4]. - ?- append@(:append@[1]@[2])@(:append@[3]@[4])@X.
X = [1, 2, 3, 4]. - ?- eval(fun([X,Y]>> :append@X@Y)@[1]@[2], V).
V = pac_demo:‘pac#3’([1], [2]). - ?- eval(:fun([X,Y]>> :append@X@Y)@[1]@[2], V).
V = [1, 2]. - ?- maplist(append([1,2]), [[a],[b],[c]], Out).
Out = [[1, 2, a], [1, 2, b], [1, 2, c]]. - ?- maplist(append@([1,2]), [[a],[b],[c]], Out).
Out = [[1, 2, a], [1, 2, b], [1, 2, c]]. - ?- pred([a])@X.
X = a. - ?- rec(F, [, X, X] & ([[X|Y], Z, [X|U]]:- call(F, Y, Z, U)))
@ [1,2] @ [3,4] @ Out.
F = ‘pac#9’,
Out = [1, 2, 3, 4]. - test1(F, X, V):- call(F, X, V).
?- test1(succ, 1, V).
V = 2. - test2(F, X, V):- call(pred([G,A,B]:- call(G, A, B)), F, X, V).
?- test2(succ, 1, V).
V = 2. - test3(F, X, V):- F@X@V.
?- test3(succ, 1, V).
V = 2. - test4(F, X, V):- eval(:fun([F,X], >> (:F)@ X), V).
?- test4(succ, 1, V).
V = 2.
Kuniaki Mukai