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
9
initialization
:-
10
forall
( between(
1
,
13
,
I
),
11
( writeln(t
:
xsI), atomic_concat(t,
I
,
G
), call(
G
) ) ).
12
13
forall
:-
14
X
forall
matrix([
1
,
2
,
3
,
4
,
5
,
6
],[dim
=
[
3
,
2
]]),
15
writeln(
X
).
16
17
writeln
:-
18
length
(
L
,
10
),
19
X
length
matrix(
L
, [dim
=
[
2
,
5
]]),
20
writeln(
X
).
21
22
writeln
:-
23
numbers(
1
,
100
,
L
),
24
X
numbers
matrix(
L
, [dim
=
[
10
,
10
]]),
25
Y
matrix
X[
1
..
2
+
3
,
_
],
26
writeln(
Y
).
27
28
writeln
:-
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
35
numbers(
I0
,
I1
,
Vals
)
:-
36
(
I0
=<
I1
->
Vals
=
[
I0
|
MVals
],
I01
is
I0
+
1
,
numbers(
I01
,
I1
,
MVals
)
;
37
Vals
=
[] ).
38
39
t5
:-
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
) ) ).
44
foreach
:-
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
58
step(
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
64
addprod(
X
,
Y
,
S0
,
S
)
:-
65
S
is
S0
+
X
*
Y
.
66
67
addprod
:-
68
t7(
10
).
69
70
t7(
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
82
step(
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
90
Z
:-
91
Len
is
2
*
3
*
4
*
5
,
92
L
Z
1
Z
Len
,
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
101
writeln
:-
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
109
writeln
:-
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
119
writeln
:-
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
129
writeln
:-
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.
148
writeln.
use_module/1
use_module( +Files )
array/2
array( +Name, +Size )
initialization/1
initialization(+ G)
forall/2
forall(: Cond,: Action)
max/1
max(+ Expression)
min/1
min(+ Expression)
length/2
length(? L,? S)
foldl/5
foldl(: Pred, + List1, + List2, ? AccIn, ? AccOut)
library
examples
mat.yap
Generated by
1.9.3