:- use_module(library(between)). % Cryptoarithmetic puzzle HE * HE = SHE. he_she(HE, SHE) :- between(1, 9, S), between(1, 9, H), between(0, 9, E), S =\= E, S =\= H, H =\= E, SHE is S*100+10*H+E, HE is H*10+E, HE * HE =:= SHE. %-------------------------------------------------------- wc(Term) :- simple(Term), writeq(Term). wc(Term) :- compound(Term), Term =.. [F0,A1|Args], standardize(F0,F), writeq(F), write('('), wc(A1), ( member(A, Args), write(','), wc(A), fail ; write(')') ). standardize('[|]', .) :- !. standardize(X, X). end_of_file. %-------------------------------------------------------- [1,2] = [X|Y]. [1,2,3] = [X|Y]. X = 3, Y = [6,2], Z = [X|Y]. Z = [X|Y], X = 3, Y = [6,2]. [1,2] = [X,Y]. [1,2,3] = [X,Y]. [1,2,3,4] = [X,Y|Z]. X = 1, Y = a+b, Z = [u,v], L = [X,Y|Z]. X = 1, Y = a+b, Z = [u,v], L = [X,Y,Z]. X = [1,2,3], Y = [4,5,6], Z = [7,8,9], L = [X,Y,Z]. L = [a,b], L = [_,X|_]. L = [a,b], L = [_,X,_|_]. L = [1|_], L = [_,2|_].