2022-12-12 18:20:48 +03:00
|
|
|
```catala
|
|
|
|
declaration scope S:
|
|
|
|
output x content integer
|
|
|
|
|
|
|
|
scope S:
|
|
|
|
definition x equals 0
|
|
|
|
|
|
|
|
# Map
|
2022-12-14 17:45:13 +03:00
|
|
|
assertion (i + 2) for i among [1; 2; 3] = [3; 4; 5]
|
2022-12-12 18:20:48 +03:00
|
|
|
|
|
|
|
# Filter
|
2024-02-13 20:23:13 +03:00
|
|
|
assertion (list of i among [1; 2; 3] such that i >= 2) = [2; 3]
|
2022-12-19 12:51:35 +03:00
|
|
|
assertion ((i + 2) for i among [1; 2; 3] such that i > 2) = [5]
|
2022-12-12 18:20:48 +03:00
|
|
|
|
|
|
|
# Sum
|
|
|
|
assertion sum integer of [1; 2; 3] = 6
|
2022-12-14 17:45:13 +03:00
|
|
|
assertion sum integer of (i + 2) for i among [1; 2; 3] = 12
|
2022-12-12 18:20:48 +03:00
|
|
|
|
|
|
|
# Count
|
|
|
|
assertion number of [1; 2; 3] = 3
|
2024-02-13 20:23:13 +03:00
|
|
|
assertion (number of list of i among [1; 2; 3] such that i >= 2) = 2
|
2022-12-12 18:20:48 +03:00
|
|
|
|
|
|
|
# Extremum
|
2023-12-05 17:06:28 +03:00
|
|
|
assertion maximum of [1; 2; 3] or if list empty then 10 = 3
|
|
|
|
assertion maximum of (decimal of i) for i among [1; 2; 3] or if list empty then 10. = 3.
|
2022-12-12 18:20:48 +03:00
|
|
|
|
|
|
|
# Arg extremum
|
2024-02-13 20:23:13 +03:00
|
|
|
assertion (content of i among [1; 2; 3]
|
2022-12-13 15:28:01 +03:00
|
|
|
such that decimal of ((2 - i) * (2 - i)) is minimum
|
2023-12-05 17:06:28 +03:00
|
|
|
or if list empty then 42)
|
2022-12-12 18:20:48 +03:00
|
|
|
= 2
|
|
|
|
```
|
|
|
|
|
2023-12-05 18:54:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
```catala-test-inline
|
2023-12-05 14:00:15 +03:00
|
|
|
$ catala Typecheck --check-invariants
|
2024-05-03 13:20:09 +03:00
|
|
|
┌─[RESULT]─
|
2024-05-03 16:12:52 +03:00
|
|
|
│ All invariant checks passed
|
2024-05-03 13:20:09 +03:00
|
|
|
└─
|
|
|
|
┌─[RESULT]─
|
2024-05-03 16:12:52 +03:00
|
|
|
│ Typechecking successful!
|
2024-05-03 13:20:09 +03:00
|
|
|
└─
|
2023-12-05 18:54:14 +03:00
|
|
|
```
|
|
|
|
|
2022-12-12 18:20:48 +03:00
|
|
|
```catala-test-inline
|
|
|
|
$ catala scopelang -s S
|
|
|
|
let scope S (x: integer|internal|output) =
|
2023-11-08 20:25:50 +03:00
|
|
|
let x : integer = error_empty ⟨ ⟨true ⊢ ⟨0⟩⟩ | false ⊢ ∅ ⟩;
|
2023-11-28 15:37:08 +03:00
|
|
|
assert (map (λ (i: integer) → i + 2) [1; 2; 3]) = [3; 4; 5];
|
|
|
|
assert (filter (λ (i: integer) → i >= 2) [1; 2; 3]) = [2; 3];
|
2023-05-04 11:59:33 +03:00
|
|
|
assert (map (λ (i: integer) → i + 2)
|
2023-11-28 15:37:08 +03:00
|
|
|
filter (λ (i: integer) → i > 2) [1; 2; 3])
|
|
|
|
= [5];
|
2023-04-17 16:10:47 +03:00
|
|
|
assert (reduce
|
2023-06-12 16:21:06 +03:00
|
|
|
(λ (sum1: integer) (sum2: integer) → sum1 + sum2)
|
|
|
|
0
|
2023-11-28 15:37:08 +03:00
|
|
|
[1; 2; 3])
|
2023-05-02 11:58:45 +03:00
|
|
|
= 6;
|
2023-04-17 16:10:47 +03:00
|
|
|
assert (reduce
|
2023-06-12 16:21:06 +03:00
|
|
|
(λ (sum1: integer) (sum2: integer) → sum1 + sum2)
|
|
|
|
0
|
2023-11-28 15:37:08 +03:00
|
|
|
map (λ (i: integer) → i + 2) [1; 2; 3])
|
2023-05-02 11:58:45 +03:00
|
|
|
= 12;
|
2023-11-28 15:37:08 +03:00
|
|
|
assert (length [1; 2; 3]) = 3;
|
|
|
|
assert (length filter (λ (i: integer) → i >= 2) [1; 2; 3]) = 2;
|
2023-04-17 16:10:47 +03:00
|
|
|
assert (reduce
|
|
|
|
(λ (max1: integer) (max2: integer) →
|
2023-06-12 16:21:06 +03:00
|
|
|
if max1 > max2 then max1 else max2)
|
|
|
|
10
|
2023-11-28 15:37:08 +03:00
|
|
|
[1; 2; 3])
|
2023-04-11 16:45:04 +03:00
|
|
|
= 3;
|
2023-04-17 16:10:47 +03:00
|
|
|
assert (reduce
|
2023-05-04 11:59:33 +03:00
|
|
|
(λ (max1: decimal) (max2: decimal) →
|
2023-06-12 16:21:06 +03:00
|
|
|
if max1 > max2 then max1 else max2)
|
|
|
|
10.
|
2023-11-28 15:37:08 +03:00
|
|
|
map (λ (i: integer) → to_rat i) [1; 2; 3])
|
2023-05-02 11:58:45 +03:00
|
|
|
= 3.;
|
2024-06-19 17:42:45 +03:00
|
|
|
assert (let weights : list of (integer, decimal) =
|
2024-01-25 19:37:00 +03:00
|
|
|
map (λ (i: integer) →
|
|
|
|
(i, let i1 : integer = i in
|
|
|
|
to_rat ((2 - i1) * (2 - i1))))
|
|
|
|
[1; 2; 3]
|
|
|
|
in
|
|
|
|
reduce
|
2024-06-19 17:42:45 +03:00
|
|
|
(λ (x1: (integer, decimal)) (x2: (integer, decimal)) →
|
2024-01-25 19:37:00 +03:00
|
|
|
if x1.1 < x2.1 then x1 else x2)
|
|
|
|
let i : integer = 42 in
|
|
|
|
(i, let i1 : integer = i in
|
|
|
|
to_rat ((2 - i1) * (2 - i1)))
|
|
|
|
weights).0
|
2023-05-02 11:58:45 +03:00
|
|
|
= 2
|
2022-12-12 18:20:48 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
```catala-test-inline
|
2024-02-26 12:18:08 +03:00
|
|
|
$ catala test-scope S
|
2024-05-03 13:20:09 +03:00
|
|
|
┌─[RESULT]─
|
2024-05-03 16:12:52 +03:00
|
|
|
│ x = 0
|
2024-05-03 13:20:09 +03:00
|
|
|
└─
|
2022-12-12 18:20:48 +03:00
|
|
|
```
|