Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
% :- use_module(library(clpfd)). atomic_chars(X, Y):- %writeln(atomic_chars(i, X, Y)), number_chars(X, Y). %writeln(atomic_chars(o, X, Y)). % old fashion style... I do know the instance pattern /* reverse_num(X, Y) :- var(X) -> ( atomic_chars(Y,Ys), reverse(Xs, Ys), atomic_chars(X,Xs) ) ; ( atomic_chars(X,Xs), reverse(Xs, Ys), atomic_chars(Y,Ys) ). */ % trying to generalize... works forward but why it fails backward... why ? /* reverse_num(X, Y) :- when((nonvar(Xs);nonvar(Ys)), reverse(Xs, Ys)), when((nonvar(X) ;nonvar(Xs)), atomic_chars(X, Xs)), when((nonvar(Y) ;nonvar(Ys)), atomic_chars(Y, Ys)). */ /* trying to embedding - not works reverse_num(X, Y) :- when((nonvar(Xs);nonvar(Ys)), ( p_reverse(Xs, Ys), when((nonvar(X);nonvar(Xs)), ( atomic_chars(X, Xs), when((nonvar(Y);nonvar(Ys)), atomic_chars(Y, Ys))) ) )). */ % generalized... thanks Pasaba Por Aqui :- meta_predicate when_2(0). when_2(P) :- strip_module(P,_,Q), Q =.. [_,A0,A1], when((ground(A0);ground(A1)), P). /* reverse_num(X, Y) :- maplist(when_2, [reverse(Xs, Ys), atomic_chars(X, Xs), atomic_chars(Y, Ys)]). */ :- op(900, xfy, ++). A ++ B ++ C :- when_2(A), !, B ++ C. A ++ B :- when_2(A), when_2(B). reverse_num(X, Y) :- reverse(Xs, Ys) ++ atomic_chars(X, Xs) ++ atomic_chars(Y, Ys).