#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Unpack the file by typing "sh filename", where "filename" is the
#    name of your file. It will create these files in your current
#    directory:
#	 concat.pl
#	 differen.pl
#	 hanoi.pl
#	 mumath.pl
#	 nrev1.pl
#	 palin25.pl
#	 pri2.pl
#	 qs4.pl
#	 queens.pl
#	 query.pl
#	 concat.w
#	 differen.w
#	 hanoi.w
#	 mumath.w
#	 nrev1.w
#	 palin25.w
#	 pri2.w
#	 qs4.w
#	 queens.w
#	 query.w
echo extracting concat.pl
cat > concat.pl << 'EOF.shar'
%	concat (con1, con6)
%	These two tests are simple examples of the concat predicate
%	con1 is determinate, con6 is non-determinate getting all 6 answers

main :- concat1, !, concat6.

concat1 :- concat([a,b,c],[d,e],X),  % con1
	write(X),nl.
concat6 :- concat(X,Y,[a,b,c,d,e]),  % con6
	write(X),nl,
	write(Y),nl,nl,
	fail.

concat([],L,L).
concat([X|L1],L2,[X|L3]) :- concat(L1,L2,L3).

EOF.shar
echo extracting differen.pl
cat > differen.pl << 'EOF.shar'
%	differen (times10,divide10,log10,ops8)
%	These 4 examples are from Warren's thesis

main :-
	times10(I1),
	d(I1,x,D1),
	write(D1), nl,
	divide10(I2),
	d(I2,x,D2),
	write(D2), nl,
	log10(I3),
	d(I3,x,D3),
	write(D3), nl,
	ops8(I4),
	d(I4,x,D4),
	write(D4), nl.

d(U+V,X,DU+DV) :- !, d(U,X,DU), d(V,X,DV).
d(U-V,X,DU-DV) :- !, d(U,X,DU), d(V,X,DV).
d(U*V,X,DU*V+U*DV) :- !, d(U,X,DU), d(V,X,DV).
d(U/V,X,(DU*V-U*DV)/(^(V,2))) :- !, d(U,X,DU), d(V,X,DV).
d(^(U,N),X,DU*N*(^(U,N1))) :- !, integer(N), N1 is N - 1, d(U,X,DU).
d(-U,X,-DU) :- !, d(U,X,DU).
d(exp(U),X,exp(U)*DU) :- !, d(U,X,DU).
d(log(U),X,DU/U) :- !, d(U,X,DU).
d(X,X,1).
d(C,X,0).

times10( ((((((((x*x)*x)*x)*x)*x)*x)*x)*x)*x ).
divide10( ((((((((x/x)/x)/x)/x)/x)/x)/x)/x)/x ).
log10( log(log(log(log(log(log(log(log(log(log(x)))))))))) ).
ops8( (x+1)*((^(x,2)+2)*(^(x,3)+3)) ).

EOF.shar
echo extracting hanoi.pl
cat > hanoi.pl << 'EOF.shar'
%	towers of hanoi ( hanoi ) for 8 disks

main :- hanoi(8).

hanoi(N) :- move(N,left,center,right).

move(0,_,_,_) :- !.
move(N,A,B,C) :- M is N-1, move(M,A,C,B), inform(A,B), move(M,C,B,A).

inform(A,B) :- write([move,disk,from,A,to,B]), nl, fail.
inform(_,_).

EOF.shar
echo extracting mumath.pl
cat > mumath.pl << 'EOF.shar'

%  Hofstader's mu math (mutest) proving muiiu
%	from Godel Escher Bach

main :- theorem(5,[m,u,i,i,u]).

rules(S, R) :- rule3(S,R).
rules(S, R) :- rule4(S,R).
rules(S, R) :- rule1(S,R).
rules(S, R) :- rule2(S,R).

rule1(S,R) :-
	append(X, [i], S),
	append(X, [i,u], R).

rule2([m | T], [m | R]) :- append(T, T, R).

rule3([], -) :- fail.
rule3(R, T) :-
	append([i,i,i], S, R),
	append([u], S, T).
rule3([H | T], [H | R]) :- rule3(T, R).

rule4([], -) :- fail.
rule4(R, T) :- append([u, u], T, R).
rule4([H | T], [H | R]) :- rule4(T, R).

theorem(Depth, [m, i]).
theorem(Depth, []) :- fail.

theorem(Depth, R) :-
	Depth > 0,
	D is Depth - 1,
	theorem(D, S),
	rules(S, R).

append([], X, X).
append([A | B], X, [A | B1]) :-
	!,
	append(B, X, B1).

EOF.shar
echo extracting nrev1.pl
cat > nrev1.pl << 'EOF.shar'
%	naive reverse (nrev1)
%	from Warren's thesis

main :-
	list30(L),
	nreverse(L,X),
	write(X), nl.

nreverse([X|L0],L) :- nreverse(L0,L1), concatenate(L1,[X],L).
nreverse([],[]).

concatenate([X|L1],L2,[X|L3]) :- concatenate(L1,L2,L3).
concatenate([],L,L).

list30([1,2,3,4,5,6,7,8,9,10,11,12,
	13,14,15,16,17,18,19,20,21,
	22,23,24,25,26,27,28,29,30]).

EOF.shar
echo extracting palin25.pl
cat > palin25.pl << 'EOF.shar'
%	serialize (palin25)
%	from Warren's thesis

main :-
	palin25(P),
	serialize(P,X),
	write(X),nl.

serialize(L,R) :-
	pairlists(L,R,A),
	arrange(A,T),
	numbered(T,1,N).

pairlists([X|L], [Y|R], [pair(X,Y)|A]) :- pairlists(L,R,A).
pairlists([], [], []).

arrange([X|L], tree(T1, X, T2)) :-
	split(L, X, L1, L2),
	arrange(L1, T1),
	arrange(L2, T2).
arrange([], void).

split([X|L], X, L1, L2) :- !, split(L, X, L1, L2).
split([X|L], Y, [X|L1], L2) :- before(X,Y), !, split(L,Y,L1,L2).
split([X|L], Y, L1, [X|L2]) :- before(Y,X), !, split(L,Y,L1,L2).
split([], _, [], []).

before(pair(X1,Y1), pair(X2,Y2)) :- X1 < X2.

numbered(tree(T1, pair(X,N1), T2), N0, N) :-
	numbered(T1, N0, N1),
	N2 is N1 + 1,
	numbered(T2,N2,N).
numbered(_,N,N).

palin25("ABLE WAS I ERE I SAW ELBA").

EOF.shar
echo extracting pri2.pl
cat > pri2.pl << 'EOF.shar'
% The sieve of Eratosthenes, from Clocksin & Mellish (pri2)
%	finding the prime numbers up to 98.	

main :- primes(98, X), write(X), nl.

primes(Limit, Ps) :- integers(2, Limit, Is), sift(Is, Ps).

integers(Low, High, [Low | Rest]) :- 
	Low =< High, !,
	M is Low+1,
	integers(M, High, Rest).
integers(_,_,[]).

sift([],[]).
sift([I | Is], [I | Ps]) :- remove(I,Is,New), sift(New, Ps).

remove(P,[],[]).
remove(P,[I | Is], Nis) :- 0 is I mod P, !, remove(P,Is,Nis).
remove(P,[I | Is], [I | Nis]) :- not(0 is I mod P), !, remove(P,Is,Nis).



EOF.shar
echo extracting qs4.pl
cat > qs4.pl << 'EOF.shar'
%	quicksort (qs4) on 50 items
%	from Warren's thesis

main :-
	list50(L),
	qsort(L,X,[]),
	write(X), nl.

qsort([X|L],R,R0) :-
	partition(L,X,L1,L2),
	qsort(L2,R1,R0),
	qsort(L1,R,[X|R1]).
qsort([],R,R).

partition([X|L],Y,[X|L1],L2) :-
	X<Y, !,
	partition(L,Y,L1,L2).
partition([X|L],Y,L1,[X|L2]) :-
	partition(L,Y,L1,L2).
partition([],_,[],[]).

list50([27,74,17,33,94,18,46,83,65,2,
	32,53,28,85,99,47,28,82,6,11,
	55,29,39,81,90,37,10,0,66,51,
	7,21,85,27,31,63,75,4,95,99,
	11,28,61,74,18,92,40,53,59,8]).

EOF.shar
echo extracting queens.pl
cat > queens.pl << 'EOF.shar'
%	the queens on a chessboard problem (queens) for 4x4 board

main :-  run(4,X), fail.

size(4).
int(1).
int(2).
int(3).
int(4).

run(Size, Soln) :- get_solutions(Size, Soln), inform(Soln).

get_solutions(Board_size, Soln) :- solve(Board_size, [], Soln).

%	newsquare generates legal positions for next queen

newsquare([], square(1, X)) :- int(X).
newsquare([square(I, J) | Rest], square(X, Y)) :-
	X is I + 1,
	int(Y),
	not(threatened(I, J, X, Y)),
	safe(X, Y, Rest).


%	safe checks whether square(X, Y) is threatened by any
%	existing queens

safe(X, Y, []).
safe(X, Y, [square(I, J) | L]) :-
	not(threatened(I, J, X, Y)),
	safe(X, Y, L).


%	threatened checks whether squares (I, J) and (X, Y)
%	threaten each other

threatened(I, J, X, Y) :-
	(I = X),
	!.
threatened(I, J, X, Y) :-
	(J = Y),
	!.
threatened(I, J, X, Y) :-
	(U is I - J),
	(V is X - Y),
	(U = V),
	!.
threatened(I, J, X, Y) :-
	(U is I + J),
	(V is X + Y),
	(U = V),
	!.


%	solve accumulates the positions of occupied squares

solve(Bs, [square(Bs, Y) | L], [square(Bs, Y) | L]) :- size(Bs).
solve(Board_size, Initial, Final) :-
	newsquare(Initial, Next),
	solve(Board_size, [Next | Initial], Final).

inform([]) :- nl,nl.
inform([M | L]) :- write(M), nl, inform(L).

%procedure not
%
%	try_me_else	N1
%	allocate
%	escape		call,0
%	cut
%	fail
%
%N1:	trust_me_else	fail
%	proceed


EOF.shar
echo extracting query.pl
cat > query.pl << 'EOF.shar'
%	query
%	from Warren's thesis

main :-
	query(X),
	write(X), nl,
	fail.

query([C1,D1,C2,D2]) :- 
	density(C1,D1), 
	density(C2,D2),
	D1 > D2,
	T1 is 20*D1,
	T2 is 21*D2,
	T1 < T2.

density(C,D) :- pop(C,P), area(C,A), D is (P*100)/A.

pop(china,	8250).	area(china,	3380).
pop(india,	5863).	area(india,	1139).
pop(ussr,	2521).	area(ussr,	8708).
pop(usa,	2119).	area(usa,	3609).
pop(indonesia,	1276).	area(indonesia,	570).
pop(japan,	1097).	area(japan,	148).
pop(brazil,	1042).	area(brazil,	3288).
pop(bangladesh,	750).	area(bangladesh,55).
pop(pakistan,	682).	area(pakistan,	311).
pop(w_germany,	620).	area(w_germany,	96).
pop(nigeria,	613).	area(nigeria,	373).
pop(mexico,	581).	area(mexico,	764).
pop(uk,		559).	area(uk,	86).
pop(italy,	554).	area(italy,	116).
pop(france,	525).	area(france,	213).
pop(phillipines,415).	area(phillipines,90).
pop(thailand,	410).	area(thailand,	200).
pop(turkey,	383).	area(turkey,	296).
pop(egypt,	364).	area(egypt,	386).
pop(spain,	352).	area(spain,	190).
pop(poland,	337).	area(poland,	121).
pop(s_korea,	335).	area(s_korea,	37).
pop(iran,	320).	area(iran,	628).
pop(ethiopia,	272).	area(ethiopia,	350).
pop(argentina,	251).	area(argentina,	1080).

EOF.shar
echo extracting concat.w
cat > concat.w << 'EOF.shar'
procedure  main/0

_517:
	call  concat1/0,0
	cut
	execute_proc  concat6/0


procedure  concat1/0

_1038:
	put_list  X1
	unify_constant_write  a
	get_cdr_list_write
	unify_constant_write  b
	get_cdr_list_write
	unify_constant_write  c
	unify_nil_write
	put_list  X2
	unify_constant_write  d
	get_cdr_list_write
	unify_constant_write  e
	unify_nil_write
	put_variable_y  Y1,X3
	call  concat/3,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	proceed


procedure  concat6/0

_1593:
	put_list  X3
	unify_constant_write  a
	get_cdr_list_write
	unify_constant_write  b
	get_cdr_list_write
	unify_constant_write  c
	get_cdr_list_write
	unify_constant_write  d
	get_cdr_list_write
	unify_constant_write  e
	unify_nil_write
	put_variable_y  Y2,X1
	put_variable_y  Y1,X2
	call  concat/3,2
	put_unsafe_value  Y2,X1
	escape  write/1
	escape  nl/0
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	escape  nl/0
	fail


procedure  concat/3

	switch_on_term  _2267,_2268,fail
_2273:
	try_me_else  _2278,3
_2267:
	get_value_x  X2,X3
	get_nil  X1
	proceed
_2278:
	trust_me_else  fail
_2268:
	get_list  X1
	unify_variable_x  X4
	unify_variable_x  X1
	get_list  X3
	unify_value_x  X4
	unify_variable_x  X3
	execute_proc  concat/3


EOF.shar
echo extracting differen.w
cat > differen.w << 'EOF.shar'
procedure  main/0

_1395:
	init  Y7
	init  Y6
	init  Y5
	init  Y4
	init  Y3
	init  Y2
	init  Y1
	put_variable_y  Y8,X1
	call  times10/1,8
	put_unsafe_value  Y8,X1
	put_constant  x,X2
	put_variable_y  Y7,X3
	call  d/3,7
	put_unsafe_value  Y7,X1
	escape  write/1
	escape  nl/0
	put_variable_y  Y6,X1
	call  divide10/1,6
	put_unsafe_value  Y6,X1
	put_constant  x,X2
	put_variable_y  Y5,X3
	call  d/3,5
	put_unsafe_value  Y5,X1
	escape  write/1
	escape  nl/0
	put_variable_y  Y4,X1
	call  log10/1,4
	put_unsafe_value  Y4,X1
	put_constant  x,X2
	put_variable_y  Y3,X3
	call  d/3,3
	put_unsafe_value  Y3,X1
	escape  write/1
	escape  nl/0
	put_variable_y  Y2,X1
	call  ops8/1,2
	put_unsafe_value  Y2,X1
	put_constant  x,X2
	put_variable_y  Y1,X3
	call  d/3,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	proceed


procedure  d/3

	switch_on_term  _5437,_5437,_5439
_5443:
	try_me_else  _5448,3
_5452:
	get_variable_y  Y2,X2
	get_structure  +/2,X1,2
	unify_variable_x  X1
	unify_variable_y  Y3
	get_structure  +/2,X3,2
	unify_variable_x  X3
	unify_variable_y  Y1
	cut
	call  d/3,3
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  d/3
_5448:
	retry_me_else  _5566
_5570:
	get_variable_y  Y2,X2
	get_structure  -/2,X1,2
	unify_variable_x  X1
	unify_variable_y  Y3
	get_structure  -/2,X3,2
	unify_variable_x  X3
	unify_variable_y  Y1
	cut
	call  d/3,3
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  d/3
_5566:
	retry_me_else  _5684
_5688:
	get_variable_y  Y2,X2
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_variable_y  Y3
	get_structure  +/2,X3,2
	unify_variable_x  X4
	unify_variable_x  X5
	get_structure  */2,X4,2
	unify_variable_x  X3
	unify_value_y  Y3
	get_structure  */2,X5,2
	unify_value_x  X1
	unify_variable_y  Y1
	cut
	call  d/3,3
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  d/3
_5684:
	retry_me_else  _5856
_5860:
	get_variable_y  Y2,X2
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_variable_y  Y3
	get_structure  //2,X3,2
	unify_variable_x  X4
	unify_variable_x  X5
	get_structure  -/2,X4,2
	unify_variable_x  X4
	unify_variable_x  X6
	get_structure  */2,X4,2
	unify_variable_x  X3
	unify_value_y  Y3
	get_structure  */2,X6,2
	unify_value_x  X1
	unify_variable_y  Y1
	get_structure  ^/2,X5,2
	unify_value_y  Y3
	unify_constant  &2
	cut
	call  d/3,3
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  d/3
_5856:
	retry_me_else  _6080
_6084:
	get_variable_x  X5,X2
	get_structure  ^/2,X1,2
	unify_variable_x  X6
	unify_variable_x  X2
	get_structure  */2,X3,2
	unify_variable_x  X3
	unify_variable_x  X4
	get_structure  */2,X3,2
	unify_variable_x  X7
	unify_value_x  X2
	get_structure  ^/2,X4,2
	unify_value_x  X6
	unify_variable_x  X3
	cut
	put_value_x  X2,X1
	escape  integer/1
	put_value_x  X3,X1
	put_constant  -,X3
	put_constant  &1,X4
	escape  is/4
	put_value_x  X6,X1
	put_value_x  X5,X2
	put_value_x  X7,X3
	execute_proc  d/3
_6080:
	retry_me_else  _6293
_6297:
	get_structure  -/1,X1,1
	unify_variable_x  X1
	get_structure  -/1,X3,1
	unify_variable_x  X3
	cut
	execute_proc  d/3
_6293:
	retry_me_else  _6350
_6354:
	get_structure  exp/1,X1,1
	unify_variable_x  X1
	get_structure  */2,X3,2
	unify_variable_x  X4
	unify_variable_x  X3
	get_structure  exp/1,X4,1
	unify_value_x  X1
	cut
	execute_proc  d/3
_6350:
	retry_me_else  _6434
_6438:
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  //2,X3,2
	unify_variable_x  X3
	unify_value_x  X1
	cut
	execute_proc  d/3
_6434:
	retry_me_else  _6499
_6503:
	get_value_x  X1,X2
	get_constant  &1,X3
	proceed
_6499:
	trust_me_else  fail
_6536:
	get_constant  &0,X3
	proceed
_5437:
	try  _6503,3
	trust  _6536
_5439:
	try_me_else  _6567,3
	switch_on_structure  15,_6573
_6573:
	log/1
	_6438
	exp/1
	_6354
	-/1
	_6297
	^/2
	_6084
	//2
	_5860
	*/2
	_5688
	-/2
	_5570
	+/2	tcdr
	_5452
_6567:
	retry  _6503
	trust  _6536


procedure  times10/1

_8046:
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  */2,X1,2
	unify_constant  x
	unify_constant  x
	proceed


procedure  divide10/1

_8858:
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_variable_x  X1
	unify_constant  x
	get_structure  //2,X1,2
	unify_constant  x
	unify_constant  x
	proceed


procedure  log10/1

_9667:
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_variable_x  X1
	get_structure  log/1,X1,1
	unify_constant  x
	proceed


procedure  ops8/1

_10246:
	get_structure  */2,X1,2
	unify_variable_x  X1
	unify_variable_x  X2
	get_structure  +/2,X1,2
	unify_constant  x
	unify_constant  &1
	get_structure  */2,X2,2
	unify_variable_x  X1
	unify_variable_x  X2
	get_structure  +/2,X1,2
	unify_variable_x  X1
	unify_constant  &2
	get_structure  ^/2,X1,2
	unify_constant  x
	unify_constant  &2
	get_structure  +/2,X2,2
	unify_variable_x  X1
	unify_constant  &3
	get_structure  ^/2,X1,2
	unify_constant  x
	unify_constant  &3
	proceed


EOF.shar
echo extracting hanoi.w
cat > hanoi.w << 'EOF.shar'
procedure  main/0

_446:
	put_constant  &8,X1
	execute_proc  hanoi/1


procedure  hanoi/1

_793:
	put_constant  left,X2
	put_constant  center,X3
	put_constant  right,X4
	execute_proc  move/4


procedure  move/4

	switch_on_term  _1756,_1757,_1757
_1756:
	try_me_else  _1767,4
_1771:
	get_constant  &0,X1
	cut
	proceed
_1767:
	trust_me_else  fail
_1757:
	get_variable_x  X5,X1
	get_variable_y  Y1,X2
	get_variable_y  Y2,X3
	get_variable_y  Y3,X4
	put_variable_y  Y4,X1
	put_value_x  X5,X2
	put_constant  -,X3
	put_constant  &1,X4
	escape  is/4
	put_value_y  Y4,X1
	put_value_y  Y1,X2
	put_value_y  Y3,X3
	put_value_y  Y2,X4
	call  move/4,4
	put_value_y  Y1,X1
	put_value_y  Y2,X2
	call  inform/2,4
	put_unsafe_value  Y4,X1
	put_value_y  Y3,X2
	put_value_y  Y2,X3
	put_value_y  Y1,X4
	execute_proc  move/4


procedure  inform/2

_2611:
	try_me_else  _2616,2
_2620:
	put_list  X3
	unify_constant_write  move
	get_cdr_list_write
	unify_constant_write  disk
	get_cdr_list_write
	unify_constant_write  from
	get_cdr_list_write
	unify_value_write_x  X1
	get_cdr_list_write
	unify_constant_write  to
	get_cdr_list_write
	unify_value_write_x  X2
	unify_nil_write
	put_value_x  X3,X1
	escape  write/1
	escape  nl/0
	fail
_2616:
	trust_me_else  fail
_2728:
	proceed


EOF.shar
echo extracting mumath.w
cat > mumath.w << 'EOF.shar'
procedure  main/0

_539:
	put_list  X2
	unify_constant_write  m
	get_cdr_list_write
	unify_constant_write  u
	get_cdr_list_write
	unify_constant_write  i
	get_cdr_list_write
	unify_constant_write  i
	get_cdr_list_write
	unify_constant_write  u
	unify_nil_write
	put_constant  &5,X1
	execute_proc  theorem/2


procedure  rules/2

_1669:
	try_me_else  _1674,2
_1678:
	execute_proc  rule3/2
_1674:
	retry_me_else  _1691
_1695:
	execute_proc  rule4/2
_1691:
	retry_me_else  _1708
_1712:
	execute_proc  rule1/2
_1708:
	trust_me_else  fail
_1729:
	execute_proc  rule2/2


procedure  rule1/2

_2234:
	get_variable_x  X3,X1
	get_variable_y  Y1,X2
	put_list  X2
	unify_constant_write  i
	unify_nil_write
	put_variable_y  Y2,X1
	call  append/3,2
	put_list  X2
	unify_constant_write  i
	get_cdr_list_write
	unify_constant_write  u
	unify_nil_write
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X3
	execute_proc  append/3


procedure  rule2/2

_2717:
	get_list  X1
	unify_constant  m
	unify_variable_x  X1
	get_list  X2
	unify_constant  m
	unify_variable_x  X3
	put_value_x  X1,X2
	execute_proc  append/3


procedure  rule3/2

	switch_on_term  _3658,_3659,_3660
_3664:
	try_me_else  _3669,2
_3673:
	get_constant  -,X2
	get_nil  X1
	fail
_3669:
	retry_me_else  _3701
_3660:
	get_variable_x  X3,X1
	get_variable_y  Y1,X2
	put_list  X1
	unify_constant_write  i
	get_cdr_list_write
	unify_constant_write  i
	get_cdr_list_write
	unify_constant_write  i
	unify_nil_write
	put_variable_y  Y2,X2
	call  append/3,2
	put_list  X1
	unify_constant_write  u
	unify_nil_write
	put_unsafe_value  Y2,X2
	put_value_y  Y1,X3
	execute_proc  append/3
_3701:
	trust_me_else  fail
_3829:
	get_list  X1
	unify_variable_x  X3
	unify_variable_x  X1
	get_list  X2
	unify_value_x  X3
	unify_variable_x  X2
	execute_proc  rule3/2
_3659:
	try  _3660,2
	trust  _3829
_3658:
	try  _3673,2
	trust  _3660


procedure  rule4/2

	switch_on_term  _4918,_4919,_4920
_4924:
	try_me_else  _4929,2
_4933:
	get_constant  -,X2
	get_nil  X1
	fail
_4929:
	retry_me_else  _4961
_4920:
	get_variable_x  X3,X1
	put_list  X1
	unify_constant_write  u
	get_cdr_list_write
	unify_constant_write  u
	unify_nil_write
	execute_proc  append/3
_4961:
	trust_me_else  fail
_5018:
	get_list  X1
	unify_variable_x  X3
	unify_variable_x  X1
	get_list  X2
	unify_value_x  X3
	unify_variable_x  X2
	execute_proc  rule4/2
_4919:
	try  _4920,2
	trust  _5018
_4918:
	try  _4933,2
	trust  _4920


procedure  theorem/2

_6053:
	try_me_else  _6058,2
_6062:
	get_list  X2
	unify_constant  m
	get_cdr_list
	unify_constant  i
	unify_nil
	proceed
_6058:
	retry_me_else  _6099
_6103:
	get_nil  X2
	fail
_6099:
	trust_me_else  fail
_6127:
	get_variable_x  X3,X1
	get_variable_y  Y1,X2
	put_value_x  X3,X1
	put_constant  &0,X2
	escape  >/2
	put_variable_x  X1,X1
	put_value_x  X3,X2
	put_constant  -,X3
	put_constant  &1,X4
	escape  is/4
	put_variable_y  Y2,X2
	call  theorem/2,2
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X2
	execute_proc  rules/2


procedure  append/3

	switch_on_term  _6921,_6922,fail
_6927:
	try_me_else  _6932,3
_6921:
	get_value_x  X2,X3
	get_nil  X1
	proceed
_6932:
	trust_me_else  fail
_6922:
	get_list  X1
	unify_variable_x  X4
	unify_variable_x  X1
	get_list  X3
	unify_value_x  X4
	unify_variable_x  X3
	cut
	execute_proc  append/3


EOF.shar
echo extracting nrev1.w
cat > nrev1.w << 'EOF.shar'
procedure  main/0

_693:
	init  Y1
	put_variable_y  Y2,X1
	call  list30/1,2
	put_unsafe_value  Y2,X1
	put_variable_y  Y1,X2
	call  nreverse/2,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	proceed


procedure  nreverse/2

	switch_on_term  _1345,_1346,fail
_1351:
	try_me_else  _1356,2
_1346:
	get_variable_y  Y1,X2
	get_list  X1
	unify_variable_y  Y3
	unify_variable_x  X1
	put_variable_y  Y2,X2
	call  nreverse/2,3
	put_list  X2
	unify_value_write_y  Y3
	unify_nil_write
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X3
	execute_proc  concatenate/3
_1356:
	trust_me_else  fail
_1345:
	get_nil  X1
	get_nil  X2
	proceed


procedure  concatenate/3

	switch_on_term  _2388,_2389,fail
_2394:
	try_me_else  _2399,3
_2389:
	get_list  X1
	unify_variable_x  X4
	unify_variable_x  X1
	get_list  X3
	unify_value_x  X4
	unify_variable_x  X3
	execute_proc  concatenate/3
_2399:
	trust_me_else  fail
_2388:
	get_value_x  X2,X3
	get_nil  X1
	proceed


procedure  list30/1

_2914:
	get_list  X1
	unify_constant  &1
	get_cdr_list
	unify_constant  &2
	get_cdr_list
	unify_constant  &3
	get_cdr_list
	unify_constant  &4
	get_cdr_list
	unify_constant  &5
	get_cdr_list
	unify_constant  &6
	get_cdr_list
	unify_constant  &7
	get_cdr_list
	unify_constant  &8
	get_cdr_list
	unify_constant  &9
	get_cdr_list
	unify_constant  &10
	get_cdr_list
	unify_constant  &11
	get_cdr_list
	unify_constant  &12
	get_cdr_list
	unify_constant  &13
	get_cdr_list
	unify_constant  &14
	get_cdr_list
	unify_constant  &15
	get_cdr_list
	unify_constant  &16
	get_cdr_list
	unify_constant  &17
	get_cdr_list
	unify_constant  &18
	get_cdr_list
	unify_constant  &19
	get_cdr_list
	unify_constant  &20
	get_cdr_list
	unify_constant  &21
	get_cdr_list
	unify_constant  &22
	get_cdr_list
	unify_constant  &23
	get_cdr_list
	unify_constant  &24
	get_cdr_list
	unify_constant  &25
	get_cdr_list
	unify_constant  &26
	get_cdr_list
	unify_constant  &27
	get_cdr_list
	unify_constant  &28
	get_cdr_list
	unify_constant  &29
	get_cdr_list
	unify_constant  &30
	unify_nil
	proceed


EOF.shar
echo extracting palin25.w
cat > palin25.w << 'EOF.shar'
procedure  main/0

_727:
	init  Y1
	put_variable_y  Y2,X1
	call  palin25/1,2
	put_unsafe_value  Y2,X1
	put_variable_y  Y1,X2
	call  serialize/2,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	proceed


procedure  serialize/2

_1380:
	init  Y1
	put_variable_y  Y2,X3
	call  pairlists/3,2
	put_unsafe_value  Y2,X1
	put_variable_y  Y1,X2
	call  arrange/2,1
	put_unsafe_value  Y1,X1
	put_constant  &1,X2
	put_variable_x  X3,X3
	execute_proc  numbered/3


procedure  pairlists/3

	switch_on_term  _2196,_2197,fail
_2202:
	try_me_else  _2207,3
_2197:
	get_list  X1
	unify_variable_x  X4
	unify_variable_x  X1
	get_list  X2
	unify_variable_x  X5
	unify_variable_x  X2
	get_list  X3
	unify_variable_x  X6
	unify_variable_x  X3
	get_structure  pair/2,X6,2
	unify_value_x  X4
	unify_value_x  X5
	execute_proc  pairlists/3
_2207:
	trust_me_else  fail
_2196:
	get_nil  X1
	get_nil  X2
	get_nil  X3
	proceed


procedure  arrange/2

	switch_on_term  _3049,_3050,fail
_3055:
	try_me_else  _3060,2
_3050:
	get_list  X1
	unify_variable_x  X3
	unify_variable_x  X1
	get_structure  tree/3,X2,3
	unify_variable_y  Y3
	unify_value_x  X3
	unify_variable_y  Y1
	put_value_x  X3,X2
	put_variable_y  Y4,X3
	put_variable_y  Y2,X4
	call  split/4,4
	put_unsafe_value  Y4,X1
	put_value_y  Y3,X2
	call  arrange/2,2
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X2
	execute_proc  arrange/2
_3060:
	trust_me_else  fail
_3049:
	get_constant  void,X2
	get_nil  X1
	proceed


procedure  split/4

	switch_on_term  _4760,_4761,fail
_4766:
	try_me_else  _4771,4
_4775:
	get_list  X1
	unify_value_x  X2
	unify_variable_x  X1
	cut
	execute_proc  split/4
_4771:
	retry_me_else  _4812
_4816:
	get_variable_y  Y3,X2
	get_variable_y  Y1,X4
	get_list  X1
	unify_variable_x  X1
	unify_variable_y  Y4
	get_list  X3
	unify_value_x  X1
	unify_variable_y  Y2
	call  before/2,4
	cut
	put_value_y  Y4,X1
	put_value_y  Y3,X2
	put_value_y  Y2,X3
	put_value_y  Y1,X4
	execute_proc  split/4
_4812:
	retry_me_else  _4940
_4944:
	get_variable_y  Y3,X2
	get_variable_y  Y2,X3
	get_list  X1
	unify_variable_x  X2
	unify_variable_y  Y4
	get_list  X4
	unify_value_x  X2
	unify_variable_y  Y1
	put_value_y  Y3,X1
	call  before/2,4
	cut
	put_value_y  Y4,X1
	put_value_y  Y3,X2
	put_value_y  Y2,X3
	put_value_y  Y1,X4
	execute_proc  split/4
_4940:
	trust_me_else  fail
_4760:
	get_nil  X1
	get_nil  X3
	get_nil  X4
	proceed
_4761:
	try  _4775,4
	retry  _4816
	trust  _4944


procedure  before/2

_6033:
	get_structure  pair/2,X1,2
	unify_variable_x  X1
	unify_void
	get_structure  pair/2,X2,2
	unify_variable_x  X2
	unify_void
	escape  </2
	proceed


procedure  numbered/3

	switch_on_term  _6641,_6641,_6643
_6643:
	try_me_else  _6652,3
_6656:
	get_variable_y  Y1,X3
	get_structure  tree/3,X1,3
	unify_variable_x  X1
	unify_variable_x  X4
	unify_variable_y  Y2
	get_structure  pair/2,X4,2
	unify_void
	unify_variable_y  Y3
	put_value_y  Y3,X3
	call  numbered/3,3
	put_variable_x  X5,X1
	put_value_y  Y3,X2
	put_constant  +,X3
	put_constant  &1,X4
	escape  is/4
	put_value_y  Y2,X1
	put_value_x  X5,X2
	put_value_y  Y1,X3
	execute_proc  numbered/3
_6652:
	trust_me_else  fail
_6641:
	get_value_x  X2,X3
	proceed


procedure  palin25/1

_7346:
	get_list  X1
	unify_constant  &65
	get_cdr_list
	unify_constant  &66
	get_cdr_list
	unify_constant  &76
	get_cdr_list
	unify_constant  &69
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &87
	get_cdr_list
	unify_constant  &65
	get_cdr_list
	unify_constant  &83
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &73
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &69
	get_cdr_list
	unify_constant  &82
	get_cdr_list
	unify_constant  &69
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &73
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &83
	get_cdr_list
	unify_constant  &65
	get_cdr_list
	unify_constant  &87
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &69
	get_cdr_list
	unify_constant  &76
	get_cdr_list
	unify_constant  &66
	get_cdr_list
	unify_constant  &65
	unify_nil
	proceed


EOF.shar
echo extracting pri2.w
cat > pri2.w << 'EOF.shar'
procedure  main/0

_608:
	put_constant  &98,X1
	put_variable_y  Y1,X2
	call  primes/2,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	proceed


procedure  primes/2

_1217:
	get_variable_x  X3,X1
	get_variable_y  Y1,X2
	put_constant  &2,X1
	put_value_x  X3,X2
	put_variable_y  Y2,X3
	call  integers/3,2
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X2
	execute_proc  sift/2


procedure  integers/3

_1824:
	try_me_else  _1829,3
_1833:
	get_variable_x  X4,X1
	get_variable_x  X5,X2
	get_list  X3
	unify_value_x  X4
	unify_variable_x  X6
	put_value_x  X4,X1
	put_value_x  X5,X2
	escape  =</2
	cut
	put_variable_x  X1,X1
	put_value_x  X4,X2
	put_constant  +,X3
	put_constant  &1,X4
	escape  is/4
	put_value_x  X5,X2
	put_value_x  X6,X3
	execute_proc  integers/3
_1829:
	trust_me_else  fail
_1980:
	get_nil  X3
	proceed


procedure  sift/2

	switch_on_term  _2706,_2707,fail
_2712:
	try_me_else  _2717,2
_2706:
	get_nil  X1
	get_nil  X2
	proceed
_2717:
	trust_me_else  fail
_2707:
	get_list  X1
	unify_variable_x  X1
	unify_variable_x  X3
	get_list  X2
	unify_value_x  X1
	unify_variable_y  Y1
	put_value_x  X3,X2
	put_variable_y  Y2,X3
	call  remove/3,2
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X2
	execute_proc  sift/2


procedure  remove/3

_4241:
	try_me_else  _4246,3
_4250:
	get_nil  X2
	get_nil  X3
	proceed
_4246:
	retry_me_else  _4273
_4277:
	get_variable_x  X4,X1
	get_variable_x  X5,X3
	get_list  X2
	unify_variable_x  X2
	unify_variable_x  X6
	put_constant  &0,X1
	put_constant  mod,X3
	escape  is/4
	cut
	put_value_x  X4,X1
	put_value_x  X6,X2
	put_value_x  X5,X3
	execute_proc  remove/3
_4273:
	trust_me_else  fail
_4389:
	get_variable_y  Y3,X1
	get_list  X2
	unify_variable_x  X2
	unify_variable_y  Y2
	get_list  X3
	unify_value_x  X2
	unify_variable_y  Y1
	call  _dummy_0/2,3
	cut
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  remove/3


procedure  _dummy_0/2

_5045:
	try_me_else  _5050,2
_5054:
	get_variable_x  X4,X1
	put_constant  &0,X1
	put_constant  mod,X3
	escape  is/4
	cut
	fail
_5050:
	trust_me_else  fail
_5105:
	proceed


EOF.shar
echo extracting qs4.w
cat > qs4.w << 'EOF.shar'
procedure  main/0

_836:
	init  Y1
	put_variable_y  Y2,X1
	call  list50/1,2
	put_nil  X3
	put_unsafe_value  Y2,X1
	put_variable_y  Y1,X2
	call  qsort/3,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	proceed


procedure  qsort/3

	switch_on_term  _1653,_1654,fail
_1659:
	try_me_else  _1664,3
_1654:
	init  Y3
	get_variable_y  Y1,X2
	get_variable_y  Y5,X3
	get_list  X1
	unify_variable_y  Y4
	unify_variable_x  X1
	put_value_y  Y4,X2
	put_variable_y  Y2,X3
	put_variable_y  Y6,X4
	call  partition/4,6
	put_unsafe_value  Y6,X1
	put_variable_y  Y3,X2
	put_value_y  Y5,X3
	call  qsort/3,4
	put_list  X3
	unify_value_write_y  Y4
	unify_variable_write_x  X8
	get_value_y  Y3,X8
	put_unsafe_value  Y2,X1
	put_value_y  Y1,X2
	execute_proc  qsort/3
_1664:
	trust_me_else  fail
_1653:
	get_value_x  X2,X3
	get_nil  X1
	proceed


procedure  partition/4

	switch_on_term  _3537,_3538,fail
_3543:
	try_me_else  _3548,4
_3552:
	get_list  X1
	unify_variable_x  X1
	unify_variable_x  X5
	get_list  X3
	unify_value_x  X1
	unify_variable_x  X3
	escape  </2
	cut
	put_value_x  X5,X1
	execute_proc  partition/4
_3548:
	retry_me_else  _3626
_3630:
	get_list  X1
	unify_variable_x  X5
	unify_variable_x  X1
	get_list  X4
	unify_value_x  X5
	unify_variable_x  X4
	execute_proc  partition/4
_3626:
	trust_me_else  fail
_3537:
	get_nil  X1
	get_nil  X3
	get_nil  X4
	proceed
_3538:
	try  _3552,4
	trust  _3630


procedure  list50/1

_4358:
	get_list  X1
	unify_constant  &27
	get_cdr_list
	unify_constant  &74
	get_cdr_list
	unify_constant  &17
	get_cdr_list
	unify_constant  &33
	get_cdr_list
	unify_constant  &94
	get_cdr_list
	unify_constant  &18
	get_cdr_list
	unify_constant  &46
	get_cdr_list
	unify_constant  &83
	get_cdr_list
	unify_constant  &65
	get_cdr_list
	unify_constant  &2
	get_cdr_list
	unify_constant  &32
	get_cdr_list
	unify_constant  &53
	get_cdr_list
	unify_constant  &28
	get_cdr_list
	unify_constant  &85
	get_cdr_list
	unify_constant  &99
	get_cdr_list
	unify_constant  &47
	get_cdr_list
	unify_constant  &28
	get_cdr_list
	unify_constant  &82
	get_cdr_list
	unify_constant  &6
	get_cdr_list
	unify_constant  &11
	get_cdr_list
	unify_constant  &55
	get_cdr_list
	unify_constant  &29
	get_cdr_list
	unify_constant  &39
	get_cdr_list
	unify_constant  &81
	get_cdr_list
	unify_constant  &90
	get_cdr_list
	unify_constant  &37
	get_cdr_list
	unify_constant  &10
	get_cdr_list
	unify_constant  &0
	get_cdr_list
	unify_constant  &66
	get_cdr_list
	unify_constant  &51
	get_cdr_list
	unify_constant  &7
	get_cdr_list
	unify_constant  &21
	get_cdr_list
	unify_constant  &85
	get_cdr_list
	unify_constant  &27
	get_cdr_list
	unify_constant  &31
	get_cdr_list
	unify_constant  &63
	get_cdr_list
	unify_constant  &75
	get_cdr_list
	unify_constant  &4
	get_cdr_list
	unify_constant  &95
	get_cdr_list
	unify_constant  &99
	get_cdr_list
	unify_constant  &11
	get_cdr_list
	unify_constant  &28
	get_cdr_list
	unify_constant  &61
	get_cdr_list
	unify_constant  &74
	get_cdr_list
	unify_constant  &18
	get_cdr_list
	unify_constant  &92
	get_cdr_list
	unify_constant  &40
	get_cdr_list
	unify_constant  &53
	get_cdr_list
	unify_constant  &59
	get_cdr_list
	unify_constant  &8
	unify_nil
	proceed


EOF.shar
echo extracting queens.w
cat > queens.w << 'EOF.shar'
procedure  main/0

_417:
	put_constant  &4,X1
	put_variable_x  X2,X2
	call  run/2,0
	fail


procedure  size/1

_651:
	get_constant  &4,X1
	proceed


procedure  int/1

	switch_on_term  _1117,fail,fail
_1123:
	try_me_else  _1128,1
_1132:
	get_constant  &1,X1
	proceed
_1128:
	retry_me_else  _1151
_1155:
	get_constant  &2,X1
	proceed
_1151:
	retry_me_else  _1174
_1178:
	get_constant  &3,X1
	proceed
_1174:
	trust_me_else  fail
_1201:
	get_constant  &4,X1
	proceed
_1117:
	switch_on_constant  7,_1221
_1221:
	&4
	_1201
	&3
	_1178
	&2
	_1155
	&1	tcdr
	_1132


procedure  run/2

_1738:
	get_variable_y  Y1,X2
	call  get_solutions/2,1
	put_value_y  Y1,X1
	execute_proc  inform/1


procedure  get_solutions/2

_2144:
	get_variable_x  X3,X2
	put_nil  X2
	execute_proc  solve/3


procedure  newsquare/2

	switch_on_term  _3502,_3503,fail
_3508:
	try_me_else  _3513,2
_3502:
	get_nil  X1
	get_structure  square/2,X2,2
	unify_constant  &1
	unify_variable_x  X1
	execute_proc  int/1
_3513:
	trust_me_else  fail
_3503:
	get_list  X1
	unify_variable_x  X5
	unify_variable_y  Y1
	get_structure  square/2,X5,2
	unify_variable_y  Y5
	unify_variable_y  Y4
	get_structure  square/2,X2,2
	unify_variable_y  Y3
	unify_variable_y  Y2
	put_value_y  Y3,X1
	put_value_y  Y5,X2
	put_constant  +,X3
	put_constant  &1,X4
	escape  is/4
	put_value_y  Y2,X1
	call  int/1,5
	put_value_y  Y5,X1
	put_value_y  Y4,X2
	put_value_y  Y3,X3
	put_value_y  Y2,X4
	call  _dummy_0/4,3
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  safe/3


procedure  _dummy_0/4

_4406:
	try_me_else  _4411,4
_4415:
	call  threatened/4,0
	cut
	fail
_4411:
	trust_me_else  fail
_4440:
	proceed


procedure  safe/3

_5626:
	try_me_else  _5631,3
_5635:
	get_nil  X3
	proceed
_5631:
	trust_me_else  fail
_5656:
	get_variable_y  Y3,X1
	get_variable_y  Y2,X2
	get_list  X3
	unify_variable_x  X5
	unify_variable_y  Y1
	get_structure  square/2,X5,2
	unify_variable_x  X3
	unify_variable_x  X4
	call  _dummy_1/4,3
	put_value_y  Y3,X1
	put_value_y  Y2,X2
	put_value_y  Y1,X3
	execute_proc  safe/3


procedure  _dummy_1/4

_6299:
	try_me_else  _6304,4
_6308:
	get_variable_x  X5,X1
	get_variable_x  X6,X2
	put_value_x  X3,X1
	put_value_x  X4,X2
	put_value_x  X5,X3
	put_value_x  X6,X4
	call  threatened/4,0
	cut
	fail
_6304:
	trust_me_else  fail
_6393:
	proceed


procedure  threatened/4

_8083:
	try_me_else  _8088,4
_8092:
	get_value_x  X3,X1
	cut
	proceed
_8088:
	retry_me_else  _8115
_8119:
	get_value_x  X4,X2
	cut
	proceed
_8115:
	retry_me_else  _8142
_8146:
	get_variable_x  X5,X1
	get_variable_x  X6,X2
	get_variable_x  X7,X3
	get_variable_y  Y2,X4
	put_variable_y  Y1,X1
	put_value_x  X5,X2
	put_constant  -,X3
	put_value_x  X6,X4
	escape  is/4
	put_variable_x  X1,X1
	put_value_x  X7,X2
	put_constant  -,X3
	put_value_y  Y2,X4
	escape  is/4
	put_unsafe_value  Y1,X8
	get_variable_y  Y1,X8
	put_value_y  Y1,X8
	get_value_x  X1,X8
	cut
	proceed
_8142:
	trust_me_else  fail
_8329:
	get_variable_x  X5,X1
	get_variable_x  X6,X2
	get_variable_x  X7,X3
	get_variable_y  Y2,X4
	put_variable_y  Y1,X1
	put_value_x  X5,X2
	put_constant  +,X3
	put_value_x  X6,X4
	escape  is/4
	put_variable_x  X1,X1
	put_value_x  X7,X2
	put_constant  +,X3
	put_value_y  Y2,X4
	escape  is/4
	put_unsafe_value  Y1,X8
	get_variable_y  Y1,X8
	put_value_y  Y1,X8
	get_value_x  X1,X8
	cut
	proceed


procedure  solve/3

_9588:
	try_me_else  _9593,3
_9597:
	get_list  X2
	unify_variable_x  X2
	unify_variable_x  X4
	get_structure  square/2,X2,2
	unify_value_x  X1
	unify_variable_x  X2
	get_list  X3
	unify_variable_x  X3
	unify_variable_x  X8
	get_value_x  X4,X8
	get_structure  square/2,X3,2
	unify_value_x  X1
	unify_value_x  X2
	execute_proc  size/1
_9593:
	trust_me_else  fail
_9722:
	get_variable_y  Y2,X1
	get_variable_y  Y3,X2
	get_variable_y  Y1,X3
	put_value_y  Y3,X1
	put_variable_y  Y4,X2
	call  newsquare/2,4
	put_list  X2
	unify_unsafe_value_write  Y4
	unify_variable_write_x  X8
	get_value_y  Y3,X8
	put_value_y  Y2,X1
	put_value_y  Y1,X3
	execute_proc  solve/3


procedure  inform/1

	switch_on_term  _10511,_10512,fail
_10517:
	try_me_else  _10522,1
_10511:
	get_nil  X1
	escape  nl/0
	escape  nl/0
	proceed
_10522:
	trust_me_else  fail
_10512:
	get_list  X1
	unify_variable_x  X1
	unify_variable_x  X2
	escape  write/1
	escape  nl/0
	put_value_x  X2,X1
	execute_proc  inform/1


EOF.shar
echo extracting query.w
cat > query.w << 'EOF.shar'
procedure  main/0

_819:
	put_variable_y  Y1,X1
	call  query/1,1
	put_unsafe_value  Y1,X1
	escape  write/1
	escape  nl/0
	fail


procedure  query/1

_1531:
	get_list  X1
	unify_variable_x  X1
	get_cdr_list
	unify_variable_y  Y2
	get_cdr_list
	unify_variable_y  Y3
	get_cdr_list
	unify_variable_y  Y1
	unify_nil
	put_value_y  Y2,X2
	call  density/2,3
	put_value_y  Y3,X1
	put_value_y  Y1,X2
	call  density/2,2
	put_value_y  Y2,X1
	put_value_y  Y1,X2
	escape  >/2
	put_variable_x  X5,X1
	put_constant  &20,X2
	put_constant  *,X3
	put_value_y  Y2,X4
	escape  is/4
	put_variable_x  X6,X1
	put_constant  &21,X2
	put_constant  *,X3
	put_value_y  Y1,X4
	escape  is/4
	put_value_x  X5,X1
	put_value_x  X6,X2
	escape  </2
	proceed


procedure  density/2

_2292:
	init  Y1
	get_variable_y  Y4,X1
	get_variable_y  Y2,X2
	put_variable_y  Y3,X2
	call  pop/2,4
	put_value_y  Y4,X1
	put_variable_y  Y1,X2
	call  area/2,3
	put_variable_x  X5,X1
	put_unsafe_value  Y3,X2
	put_constant  *,X3
	put_constant  &100,X4
	escape  is/4
	put_value_y  Y2,X1
	put_value_x  X5,X2
	put_constant  /,X3
	put_unsafe_value  Y1,X4
	escape  is/4
	proceed


procedure  pop/2

_2790:
	get_constant  china,X1
	get_constant  &8250,X2
	proceed


procedure  area/2

_3036:
	get_constant  china,X1
	get_constant  &3380,X2
	proceed


procedure  pop/2

_3282:
	get_constant  india,X1
	get_constant  &5863,X2
	proceed


procedure  area/2

_3528:
	get_constant  india,X1
	get_constant  &1139,X2
	proceed


procedure  pop/2

_3774:
	get_constant  ussr,X1
	get_constant  &2521,X2
	proceed


procedure  area/2

_4020:
	get_constant  ussr,X1
	get_constant  &8708,X2
	proceed


procedure  pop/2

_4266:
	get_constant  usa,X1
	get_constant  &2119,X2
	proceed


procedure  area/2

_4512:
	get_constant  usa,X1
	get_constant  &3609,X2
	proceed


procedure  pop/2

_4756:
	get_constant  indonesia,X1
	get_constant  &1276,X2
	proceed


procedure  area/2

_5002:
	get_constant  indonesia,X1
	get_constant  &570,X2
	proceed


procedure  pop/2

_5246:
	get_constant  japan,X1
	get_constant  &1097,X2
	proceed


procedure  area/2

_5492:
	get_constant  japan,X1
	get_constant  &148,X2
	proceed


procedure  pop/2

_5738:
	get_constant  brazil,X1
	get_constant  &1042,X2
	proceed


procedure  area/2

_5982:
	get_constant  brazil,X1
	get_constant  &3288,X2
	proceed


procedure  pop/2

_6224:
	get_constant  bangladesh,X1
	get_constant  &750,X2
	proceed


procedure  area/2

_6468:
	get_constant  bangladesh,X1
	get_constant  &55,X2
	proceed


procedure  pop/2

_6712:
	get_constant  pakistan,X1
	get_constant  &682,X2
	proceed


procedure  area/2

_6956:
	get_constant  pakistan,X1
	get_constant  &311,X2
	proceed


procedure  pop/2

_7198:
	get_constant  w_germany,X1
	get_constant  &620,X2
	proceed


procedure  area/2

_7442:
	get_constant  w_germany,X1
	get_constant  &96,X2
	proceed


procedure  pop/2

_7686:
	get_constant  nigeria,X1
	get_constant  &613,X2
	proceed


procedure  area/2

_7930:
	get_constant  nigeria,X1
	get_constant  &373,X2
	proceed


procedure  pop/2

_8174:
	get_constant  mexico,X1
	get_constant  &581,X2
	proceed


procedure  area/2

_8418:
	get_constant  mexico,X1
	get_constant  &764,X2
	proceed


procedure  pop/2

_8660:
	get_constant  uk,X1
	get_constant  &559,X2
	proceed


procedure  area/2

_8904:
	get_constant  uk,X1
	get_constant  &86,X2
	proceed


procedure  pop/2

_9148:
	get_constant  italy,X1
	get_constant  &554,X2
	proceed


procedure  area/2

_9392:
	get_constant  italy,X1
	get_constant  &116,X2
	proceed


procedure  pop/2

_9636:
	get_constant  france,X1
	get_constant  &525,X2
	proceed


procedure  area/2

_9880:
	get_constant  france,X1
	get_constant  &213,X2
	proceed


procedure  pop/2

_10122:
	get_constant  phillipines,X1
	get_constant  &415,X2
	proceed


procedure  area/2

_10366:
	get_constant  phillipines,X1
	get_constant  &90,X2
	proceed


procedure  pop/2

_10610:
	get_constant  thailand,X1
	get_constant  &410,X2
	proceed


procedure  area/2

_10854:
	get_constant  thailand,X1
	get_constant  &200,X2
	proceed


procedure  pop/2

_11098:
	get_constant  turkey,X1
	get_constant  &383,X2
	proceed


procedure  area/2

_11342:
	get_constant  turkey,X1
	get_constant  &296,X2
	proceed


procedure  pop/2

_11586:
	get_constant  egypt,X1
	get_constant  &364,X2
	proceed


procedure  area/2

_11830:
	get_constant  egypt,X1
	get_constant  &386,X2
	proceed


procedure  pop/2

_12074:
	get_constant  spain,X1
	get_constant  &352,X2
	proceed


procedure  area/2

_12318:
	get_constant  spain,X1
	get_constant  &190,X2
	proceed


procedure  pop/2

_12562:
	get_constant  poland,X1
	get_constant  &337,X2
	proceed


procedure  area/2

_12806:
	get_constant  poland,X1
	get_constant  &121,X2
	proceed


procedure  pop/2

_13048:
	get_constant  s_korea,X1
	get_constant  &335,X2
	proceed


procedure  area/2

_13292:
	get_constant  s_korea,X1
	get_constant  &37,X2
	proceed


procedure  pop/2

_13536:
	get_constant  iran,X1
	get_constant  &320,X2
	proceed


procedure  area/2

_13780:
	get_constant  iran,X1
	get_constant  &628,X2
	proceed


procedure  pop/2

_14024:
	get_constant  ethiopia,X1
	get_constant  &272,X2
	proceed


procedure  area/2

_14268:
	get_constant  ethiopia,X1
	get_constant  &350,X2
	proceed


procedure  pop/2

_14514:
	get_constant  argentina,X1
	get_constant  &251,X2
	proceed


procedure  area/2

_14723:
	get_constant  argentina,X1
	get_constant  &1080,X2
	proceed


EOF.shar
