Operators
Arithmetic
| Unicode |
ASCII |
Operation |
+ |
+ |
Addition |
- |
- |
Subtraction |
× |
* |
Multiplication |
/ |
/ |
Division |
% |
% |
Modulo |
^ |
^ |
Exponentiation |
± |
+- |
Uncertainty |
5 + 3 # 8
6 × 7 # 42
2 ^ 10 # 1024
Comparison
| Unicode |
ASCII |
Operation |
= |
= |
Value equality |
≠ |
/= or != |
Inequality |
< |
< |
Less than |
> |
> |
Greater than |
≤ |
<= |
Less or equal |
≥ |
>= |
Greater or equal |
Three levels of equality:
| Level |
Unicode |
ASCII |
Semantics |
| Value |
= |
= |
Compare values |
| Structural |
≡ |
=== |
Alpha-equivalent, ignoring sharing |
| Referential |
≣ |
(reserved) |
Same node in DAG |
Logical
| Unicode |
ASCII |
Operation |
∧ |
&& or and |
And |
∨ |
\|\| or or |
Or |
¬ |
! or not |
Not |
Tensor Operations
| Unicode |
ASCII |
Operation |
Example |
↦ |
-: |
Map |
[1,2,3] ↦ (λ→ ₀ × 2) → [2,4,6] |
▸ |
\|> |
Filter |
[1,2,3,4] ▸ (λ→ ₀ > 2) → [3,4] |
⤇ |
>>= |
Bind (flatmap) |
[1,2] ⤇ (λ→ [₀, ₀×2]) → [1,2,2,4] |
⌿ |
fold |
Fold/reduce |
⌿ (λ→ λ→ ₁ + ₀) 0 [1,2,3] → 6 |
⍀ |
scan |
Prefix sums |
[1,2,3,4] ⍀ → [1,3,6,10] |
Σ |
+/ or sum |
Sum |
[1,2,3] Σ → 6 |
Π |
*/ or prod |
Product |
[1,2,3] Π → 6 |
⊕ |
++ |
Concatenate |
[1,2] ⊕ [3,4] → [1,2,3,4] |
⊗ |
zip |
Zip |
[1,2] ⊗ [3,4] → [⟨1,3⟩, ⟨2,4⟩] |
Function Composition
| Unicode |
ASCII |
Operation |
∘ |
.: |
Compose: (f ∘ g) x = f (g x) |
let f = λ→ ₀ + 1 in
let g = λ→ ₀ × 2 in
(f ∘ g) 5
# Result: 11
I/O Operations
| Unicode |
ASCII |
Operation |
▷ |
>> |
Write to stream/file |
◁ |
<< |
Read from file |
"hello" ▷ stdout # Write to stdout (no newline)
"error" ▷ stderr # Write to stderr
"content" ▷ "/tmp/out" # Write to file
◁ "/tmp/input.txt" # Read file contents
Bitwise
| Unicode |
Name |
Operation |
| |
bitand |
Bitwise AND |
| |
bitor |
Bitwise OR |
⊻ |
bitxor |
Bitwise XOR |
| |
shl |
Shift left |
| |
shr |
Shift right |
All bitwise operations are curried: ℤ → ℤ → ℤ.
Precedence (low to high)
- Postfix reduction (
Σ, Π, ⍀)
- Function application
- Infix operators (
+, ×, etc.)
- Field access (
.field)