Integers
What is an Integer?
An Integer is a whole number — positive, negative, or zero — with no decimal point. Integers in Frankie have no fixed size limit; they grow as large as needed without overflow.
x = 42
y = -7
z = 0
big = 2 ** 64 # 18446744073709551616 — no overflow
puts big # 18446744073709551616
Integer Literals
Write integers directly. Negative integers use a leading minus sign.
count = 100
offset = -32
zero = 0
big = 1000000
Frankie does not currently support underscore separators (1_000_000) or hexadecimal/binary literals. Use plain decimal.
Arithmetic Operators
| Operator | Meaning | Example | Result |
|---|---|---|---|
+ |
Addition | 10 + 3 |
13 |
- |
Subtraction | 10 - 3 |
7 |
* |
Multiplication | 10 * 3 |
30 |
/ |
Float division | 10 / 3 |
3.333... |
// |
Integer division | 10 // 3 |
3 |
% |
Modulo (remainder) | 10 % 3 |
1 |
** |
Exponentiation | 2 ** 8 |
256 |
/ always produces a Float. Use // (Fortran-style) when you want a truncated Integer result.
puts 10 / 3 # 3.3333333333333335 — Float
puts 10 // 3 # 3 — Integer
puts 10 % 3 # 1 — remainder
puts 2 ** 10 # 1024
Integer Division and Modulo with Negatives
// truncates toward negative infinity (floor division), consistent with Python:
puts 7 // 2 # 3
puts (-7) // 2 # -4 (floors toward -∞, not toward zero)
puts 7 % 2 # 1
puts (-7) % 2 # 1 (result has the sign of the divisor)
Compound Assignment
x = 10
x += 3 # x = 13
x -= 2 # x = 11
x *= 4 # x = 44
x //= 5 # x = 8 (integer division assign)
x **= 2 # x = 64
x %= 10 # x = 4
puts x # 4
Comparison Operators
Comparisons return a Boolean.
puts 5 > 3 # true
puts 5 < 3 # false
puts 5 >= 5 # true
puts 5 <= 4 # false
puts 5 == 5 # true
puts 5 != 3 # true
Integers and Floats compare naturally:
puts 3 == 3.0 # true
puts 3 < 3.14 # true
Conversion
# Integer → Float
puts 42.to_f # 42.0
# Integer → String
puts 42.to_s # "42"
# Integer → Integer (no-op, but valid in generic code)
puts 42.to_i # 42
# String → Integer
puts "42".to_i # 42
puts "-7".to_i # -7
puts to_int("99") # 99 — standalone function form
# Float → Integer (truncates toward zero)
puts 3.9.to_i # 3
puts (-3.9).to_i # -3
Non-numeric strings produce a runtime error — there is no silent fallback to zero:
puts "hello".to_i # Runtime error
Math Functions
These standalone functions work on both Integer and Float values:
puts abs(-42) # 42 — absolute value
puts sqrt(144) # 12.0 — square root (always returns Float)
puts floor(3.9) # 3 — round down
puts ceil(3.1) # 4 — round up
puts round(3.5) # 4 — round to nearest
puts round(3.14159, 2) # 3.14 — round to n decimal places
puts min(3, 7) # 3
puts max(3, 7) # 7
puts clamp(15, 0, 10) # 10 — clamp between lo and hi
puts clamp(-5, 0, 10) # 0
The times Loop
n.times do |i| iterates n times, with i counting from 0 to n-1. This is one of Frankie's most used integer features, borrowed from Ruby.
3.times do |i|
puts "iteration #{i}"
end
# iteration 0
# iteration 1
# iteration 2
# Without the loop variable
5.times do
print "* "
end
# * * * * *
The standalone times(n) do |i| form is identical:
times(3) do |i|
puts i
end
Sequences
seq(start, stop, step) generates a vector of integers (or floats) from start to stop.
puts seq(1, 5) # [1, 2, 3, 4, 5]
puts seq(0, 10, 2) # [0, 2, 4, 6, 8, 10]
puts seq(10, 1, -1) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
puts seq(0, 1, 0.25) # [0.0, 0.25, 0.5, 0.75, 1.0]
vec(range) builds a vector from a range literal:
puts vec(1..10) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
puts vec(1...10) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Randomness
# Random integer between a and b inclusive
puts rand_int(1, 6) # dice roll — e.g. 4
puts rand_int(0, 100) # 0 to 100
# Repeatable with a seed
rand_seed(42)
puts rand_int(1, 100) # always the same value for seed 42
Integers in Vectors
Vectors of integers support R-style vectorised arithmetic — operations apply element-wise:
v = [1, 2, 3, 4, 5]
puts v * 2 # [2, 4, 6, 8, 10]
puts v + [10, 10, 10, 10, 10] # [11, 12, 13, 14, 15]
puts v ** 2 # [1, 4, 9, 16, 25]
# Statistical functions on integer vectors
puts sum(v) # 15
puts mean(v) # 3.0
puts min(v) # 1
puts max(v) # 5
puts median(v) # 3
puts stdev(v) # 1.5811...
Type Checking
puts is_integer(42) # true
puts is_integer(3.14) # false
puts is_integer("42") # false
Quick Reference
| Category | Operation | Example | Result |
|---|---|---|---|
| Arithmetic | + - * |
10 + 3 |
13 |
| Float division | / |
10 / 3 |
3.333... |
| Integer division | // |
10 // 3 |
3 |
| Modulo | % |
10 % 3 |
1 |
| Exponentiation | ** |
2 ** 8 |
256 |
| Comparison | == != < > <= >= |
5 > 3 |
true |
| Compound assign | += -= *= //= **= %= |
x += 1 |
— |
| Convert to Float | .to_f |
42.to_f |
42.0 |
| Convert to String | .to_s |
42.to_s |
"42" |
| Absolute value | abs(n) |
abs(-7) |
7 |
| Square root | sqrt(n) |
sqrt(144) |
12.0 |
| Rounding | floor ceil round |
floor(3.9) |
3 |
| Clamp | clamp(n, lo, hi) |
clamp(15, 0, 10) |
10 |
| Loop n times | n.times do \|i\| |
3.times do \|i\| |
— |
| Sequence | seq(start, stop, step) |
seq(1, 5) |
[1,2,3,4,5] |
| Random | rand_int(a, b) |
rand_int(1, 6) |
1–6 |
| Type check | is_integer(x) |
is_integer(42) |
true |