| 
									
										
										
										
											2013-09-19 14:35:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | :- style_check(all). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-19 14:35:31 +01:00
										 |  |  | :- use_module(library(matrix)). | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | :- use_module(library(maplist)). | 
					
						
							| 
									
										
										
										
											2013-09-19 14:35:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | :- initialization( main ). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main :- | 
					
						
							|  |  |  | 	forall( 	between(1, 13,I), | 
					
						
							|  |  |  | 		( writeln(t:xsI), atomic_concat(t,I,G),	call(G) ) ). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-19 14:35:31 +01:00
										 |  |  | t1 :- | 
					
						
							| 
									
										
										
										
											2013-09-19 17:59:37 +01:00
										 |  |  | 	X <== matrix([1,2,3,4,5,6],[dim=[3,2]]), | 
					
						
							| 
									
										
										
										
											2013-09-19 14:35:31 +01:00
										 |  |  | 	writeln(X). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-19 17:59:37 +01:00
										 |  |  | t2 :- | 
					
						
							|  |  |  | 	length(L, 10), | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[2,5]]), | 
					
						
							|  |  |  | 	writeln(X). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t3 :- | 
					
						
							|  |  |  | 	numbers(1, 100, L), | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[10,10]]), | 
					
						
							|  |  |  | 	Y <== X[1..2+3,_], | 
					
						
							|  |  |  | 	writeln(Y). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t4 :- | 
					
						
							|  |  |  | 	numbers(1, 100, L), | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[10,10]]), | 
					
						
							|  |  |  | 	X1 <== matrix(X[1..2+3,_], [dim=[2,10]]), | 
					
						
							|  |  |  | 	Y <== [size=size(X1),max=max(X1),min=min(X1)], | 
					
						
							|  |  |  | 	writeln(Y). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | numbers(I0, I1, Vals) :- | 
					
						
							|  |  |  | 	( I0 =< I1 -> Vals = [I0|MVals], I01 is I0+1, numbers(I01, I1, MVals) ; | 
					
						
							|  |  |  | 	    Vals = [] ). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | t5 :- | 
					
						
							|  |  |  | 	numbers(1, 100, L), | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[10,10]]), | 
					
						
							|  |  |  | 	writeln('diagonal:'), | 
					
						
							| 
									
										
										
										
											2013-09-29 11:31:18 +01:00
										 |  |  | 	foreach([I in 0..9, J in I..I], Y^(Y <== X[I,J], writeln(Y) ) ). | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | t6 :- | 
					
						
							|  |  |  | 	Len = 10, | 
					
						
							|  |  |  | 	LenSq is Len*Len, | 
					
						
							|  |  |  | 	Len1 is Len-1, | 
					
						
							|  |  |  | 	numbers(1, LenSq, L), | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[Len,Len]]), | 
					
						
							|  |  |  | 	Y <== matrix(L, [dim=[Len,Len]]), | 
					
						
							|  |  |  | 	Z <== matrix(L, [dim=[Len,Len]]), | 
					
						
							|  |  |  | 	writeln('product:'), | 
					
						
							| 
									
										
										
										
											2013-09-29 11:31:18 +01:00
										 |  |  | 	foreach([I in 0..Len1, J in 0..Len1], step(X,Y,Z,I,J) ), | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | 	O <== list(Z), | 
					
						
							|  |  |  | 	writeln(O). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | % core step of matrix multiplication: row I per column J | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | step(X,Y,Z,I,J) :- | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	Xs <== X[I,_], % row I | 
					
						
							|  |  |  | 	Ys <== Y[_,J], % col J | 
					
						
							|  |  |  | 	foldl(addprod, Xs, Ys, 0, P), % scalar product, fold accumulates the result in two last arguments | 
					
						
							| 
									
										
										
										
											2013-09-20 01:42:50 +01:00
										 |  |  | 	Z[I,J] <== P. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | addprod(X, Y, S0, S) :- | 
					
						
							|  |  |  | 	S is S0+X*Y. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-20 01:42:50 +01:00
										 |  |  | t7 :- | 
					
						
							|  |  |  | 	t7(10). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t7(Len) :- | 
					
						
							|  |  |  | 	LenSq is Len*Len, | 
					
						
							|  |  |  | 	Len1 is Len-1, | 
					
						
							|  |  |  | 	numbers(1, LenSq, L), | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[Len,Len]]), | 
					
						
							|  |  |  | 	Y <== matrix(L, [dim=[Len,Len]]), | 
					
						
							|  |  |  | 	Z <== matrix(L, [dim=[Len,Len]]), | 
					
						
							|  |  |  | 	writeln('product:'), | 
					
						
							| 
									
										
										
										
											2013-09-29 11:31:18 +01:00
										 |  |  | 	foreach([I in 0..Len1, J in 0..Len1], step(X,Y,Z,I,J) , 0, O), | 
					
						
							| 
									
										
										
										
											2013-09-20 01:42:50 +01:00
										 |  |  | 	writeln(O). | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | % core step of matrix multiplication: row I per column J | 
					
						
							|  |  |  | step(X,Y,Z,I,J,S0,SF) :- | 
					
						
							|  |  |  | 	Xs <== X[I,_], % row I | 
					
						
							|  |  |  | 	Ys <== Y[_,J], % col J | 
					
						
							|  |  |  | 	foldl(addprod, Xs, Ys, 0, P), % scalar product, fold accumulates the result | 
					
						
							|  |  |  | 	SF is S0+P, % total sum (checksum) | 
					
						
							|  |  |  | 	Z[I,J] <== P. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 23:23:42 +01:00
										 |  |  | t8 :- | 
					
						
							|  |  |  | 	Len is 2*3*4*5, | 
					
						
							|  |  |  | 	L <== 1..Len, | 
					
						
							|  |  |  | 	X <== matrix(L, [dim=[5,4,3,2]]), | 
					
						
							|  |  |  | 	writeln('list:'), | 
					
						
							|  |  |  | 	OL <== list( X ), | 
					
						
							|  |  |  | 	LL <== lists( X ), | 
					
						
							|  |  |  | 	writeln(OL), | 
					
						
							|  |  |  | 	writeln(LL). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-20 01:16:25 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | t9 :- | 
					
						
							|  |  |  | 	N1 = 1, | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | 	X <== array[0..N1,0..N1] of [1,2,3,4], | 
					
						
							|  |  |  | 	Z <== array[0..N1,0..N1] of _, | 
					
						
							| 
									
										
										
										
											2013-09-29 11:31:18 +01:00
										 |  |  | 	foreach([I in 0..N1, J in I..N1], Z[I,J] <== X[I,J] - X[J,I]), | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	O <== list(Z), | 
					
						
							|  |  |  | 	writeln(O). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t10 :- | 
					
						
							|  |  |  | 	N1 = 1, | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | 	X <== array[0..N1,0..N1] of 1:4, | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	O <== list(X-2), | 
					
						
							|  |  |  | 	writeln(O), | 
					
						
							|  |  |  | 	O1 <== list(X)+2, | 
					
						
							|  |  |  | 	writeln(O1), | 
					
						
							|  |  |  | 	O2 <== list(X-X), | 
					
						
							|  |  |  | 	writeln(O2). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t11 :- | 
					
						
							|  |  |  | 	N = 3, | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | 	X <== array[1..N,1..N] of 1:9, | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	O <== X[1,1], | 
					
						
							|  |  |  | 	writeln(O), | 
					
						
							|  |  |  | 	O1 <== X[2,_], | 
					
						
							|  |  |  | 	writeln(O1), | 
					
						
							|  |  |  | 	O2 <== X[_,2], | 
					
						
							|  |  |  | 	writeln(O2). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t12 :- | 
					
						
							|  |  |  | 	N = 8, | 
					
						
							|  |  |  | 	N2 is N*N, | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | 	X <== array[N,N] of 1:N2, | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	N1 is N-1, | 
					
						
							| 
									
										
										
										
											2013-09-29 11:31:18 +01:00
										 |  |  | 	foreach([I in 0..N1, J in 0..N1], plus(X[I,J]), 0, AccF), | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	writeln(sum=AccF). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  t13 :- | 
					
						
							|  |  |  | 	N = 2, | 
					
						
							|  |  |  | 	N2 is N*N, | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | 	X  <== array[1..N,1..N] of 1:N2, | 
					
						
							|  |  |  | 	Y  <== array[1..N,1..N] of _, | 
					
						
							| 
									
										
										
										
											2013-09-28 11:09:57 +01:00
										 |  |  | 	Y[1,_] <== X[_,1], | 
					
						
							| 
									
										
										
										
											2016-12-05 20:49:10 -06:00
										 |  |  | 	LX <== list(X), | 
					
						
							|  |  |  | 	LY <== list(Y), | 
					
						
							|  |  |  | 	writeln('x'=LX), | 
					
						
							|  |  |  | 	writeln('y'=LY), | 
					
						
							|  |  |  | 	fail. | 
					
						
							|  |  |  | t13. |