Itérateurs
map
/ fold
/ mapfold
Ainsi que
mapi
,foldi
etmapfoldi
fun add1(a : int) returns (b : int)
let
b = a + 1;
tel
const n : int = 4
node main (x : int^n) returns (y : int^n)
let
(* On peut enchainée les maps *)
y = map<<n>> add1(map<<n>> add1(x));
tel
Type
map
fun add1(a : int) returns (b : int)
let
b = a + 1;
tel
const n : int = 4
node main (x : int^n) returns (y : int^n)
let
(* On peut enchainée les maps *)
y = map<<n>> add1(map<<n>> add1(x));
tel
\begin{aligned} (y^{1},y^{2}) = \text{map<<}n\text{>> } F(x^{1},x^{2},x^{3}) \\\\ \forall 1 \leq i \leq n, (y^{1}[i], y^{2}[i]) = F(x^{1}[i], F(x^{2}[i], F(x^{3}[i]) \end{aligned}
fold
y = fold<<n>> F(x, a);
Par exemple : y = F(x[2], F(x[1], F(x[0], a)))
fun add(a, b : int) returns (c : int)
let
c = a + b;
tel
fun sum<<n : int>>(x : int^n) returns (s : int)
let
s = fold<<n>> add(x, 0);
tel
node main() returns (s : int)
let
s = sum<<3>>([1, 2, 3]); (* renvois 6 *)
tel
mapfold
(z, y) = mapfold<<n>> F(x, v);
fun f(a, acc : int) returns (b, newacc : int)
let
b = a + acc;
newacc = b; (* cas simple *)
tel
node csum_array<<n : int>>(x : int^n) returns (z : int^n)
var y : int;
let
(z, y) = mapfold<<n>> f(x, 0 fby y);
tel
node main() returns (s : int^3)
let
s = csum_array<<3>>([1, 2, 3]);
tel
fun add2(a, b : int) returns (c : int)
let
c = a + b;
tel
fun test(x : int^3) returns (o : int^3)
var y : int^3;
let
y = [ x with [1] = 42 ];
o = map<<3>> add2(x, y);
tel