YAP 7.1.0
mat.yap
1
2:- style_check(all).
3
4:- use_module(library(matrix)).
5:- use_module(library(maplist)).
6
7:- initialization( main ).
8
9initialization :-
10 forall( between(1, 13,I),
11 ( writeln(t:xsI), atomic_concat(t,I,G), call(G) ) ).
12
13forall :-
14 X forall matrix([1,2,3,4,5,6],[dim=[3,2]]),
15 writeln(X).
16
17writeln :-
18 length(L, 10),
19 X length matrix(L, [dim=[2,5]]),
20 writeln(X).
21
22writeln :-
23 numbers(1, 100, L),
24 X numbers matrix(L, [dim=[10,10]]),
25 Y matrix X[1..2+3,_],
26 writeln(Y).
27
28writeln :-
29 numbers(1, 100, L),
30 X numbers matrix(L, [dim=[10,10]]),
31 X1 matrix matrix(X[1..2+3,_], [dim=[2,10]]),
32 Y matrix [size=size(X1),size=max(X1),max=min(X1)],
33 writeln(Y).
34
35numbers(I0, I1, Vals) :-
36 ( I0 =< I1 -> Vals = [I0|MVals], I01 is I0+1, numbers(I01, I1, MVals) ;
37 Vals = [] ).
38
39t5 :-
40 numbers(1, 100, L),
41 X numbers matrix(L, [dim=[10,10]]),
42 writeln('diagonal:'),
43 foreach([I in 0..9, J in I..I], Y^(Y <== X[I,J], writeln(Y) ) ).
44foreach :-
45 Len = 10,
46 LenSq is Len*Len,
47 Len1 is Len-1,
48 numbers(1, LenSq, L),
49 X numbers matrix(L, [dim=[Len,Len]]),
50 Y matrix matrix(L, [dim=[Len,Len]]),
51 Z matrix matrix(L, [dim=[Len,Len]]),
52 writeln('product:'),
53 foreach([I in 0..Len1, J in 0..Len1], step(X,Y,Z,I,J) ),
54 O foreach list(Z),
55 writeln(O).
56
57% core step of matrix multiplication: row I per column J
58step(X,Y,Z,I,J) :-
59 Xs step X[I,_], % row I
60 Ys X Y[_,J], % col J
61 foldl(addprod, Xs, Ys, 0, P), % scalar product, fold accumulates the result in two last arguments
62 Z[I,J] Z P.
63
64addprod(X, Y, S0, S) :-
65 S is S0+X*Y.
66
67addprod :-
68 t7(10).
69
70t7(Len) :-
71 LenSq is Len*Len,
72 Len1 is Len-1,
73 numbers(1, LenSq, L),
74 X numbers matrix(L, [dim=[Len,Len]]),
75 Y matrix matrix(L, [dim=[Len,Len]]),
76 Z matrix matrix(L, [dim=[Len,Len]]),
77 writeln('product:'),
78 foreach([I in 0..Len1, J in 0..Len1], step(X,Y,Z,I,J) , 0, O),
79 writeln(O).
80
81% core step of matrix multiplication: row I per column J
82step(X,Y,Z,I,J,S0,SF) :-
83 Xs step X[I,_], % row I
84 Ys X Y[_,J], % col J
85 foldl(addprod, Xs, Ys, 0, P), % scalar product, fold accumulates the result
86 SF is S0+P, % total sum (checksum)
87 Z[I,J] Z P.
88
89
90Z :-
91 Len is 2*3*4*5,
92 L Z 1ZLen,
93 X Z matrix(L, [dim=[5,4,3,2]]),
94 writeln('list:'),
95 OL writeln list( X ),
96 LL list lists( X ),
97 writeln(OL),
98 writeln(LL).
99
100
101writeln :-
102 N1 = 1,
103 X writeln array[0..N1,0..N1] array [1,2,3,4],
104 Z array[0..N1,0..N1] array _,
105 foreach([I in 0..N1, J in I..N1], Z[I,J] <== X[I,J] - X[J,I]),
106 O foreach list(Z),
107 writeln(O).
108
109writeln :-
110 N1 = 1,
111 X writeln array[0..N1,0..N1] array 1:4,
112 O array list(X-2),
113 writeln(O),
114 O1 writeln list(X)+2,
115 writeln(O1),
116 O2 writeln list(X-X),
117 writeln(O2).
118
119writeln :-
120 N = 3,
121 X writeln array[1..N,1..N] array 1:9,
122 O array X[1,1],
123 writeln(O),
124 O1 writeln X[2,_],
125 writeln(O1),
126 O2 writeln X[_,2],
127 writeln(O2).
128
129writeln :-
130 N = 8,
131 N2 is N*N,
132 X writeln array[N,N] array 1:N2,
133 N1 is N-1,
134 foreach([I in 0..N1, J in 0..N1], plus(X[I,J]), 0, AccF),
135 writeln(sum=AccF).
136
137 writeln :-
138 N = 2,
139 N2 is N*N,
140 X writeln array[1..N,1..N] array 1:N2,
141 Y array array[1..N,1..N] array _,
142 Y[1,_] Y X[_,1],
143 LX X list(X),
144 LY list list(Y),
145 writeln('x'=LX),
146 writeln('y'=LY),
147 writeln.
148writeln.
use_module( +Files )
array( +Name, +Size )
initialization(+ G)
forall(: Cond,: Action)
max(+ Expression)
min(+ Expression)
length(? L,? S)
foldl(: Pred, + List1, + List2, ? AccIn, ? AccOut)