git-subtree-dir: octive-lean git-subtree-mainline:fd3d42ae33git-subtree-split:4b6fcec565
165 lines
2.6 KiB
Text
165 lines
2.6 KiB
Text
import OctiveLean
|
|
import OctiveLean.DSL
|
|
|
|
/-!
|
|
# OctiveLean Rosetta Stone — DSL edition
|
|
|
|
Octave is now a first-class Lean 4 syntax category. The LSP recognizes
|
|
keywords, operators, and structure inside `octave! { ... }` blocks.
|
|
|
|
Syntax differences from standard Octave:
|
|
• Outer block: `octave! { ... }`
|
|
• Block terminators: `endif` / `endfor` / `endwhile` / `endswitch` /
|
|
`end_try_catch` / `endfunction` (Octave-valid keywords)
|
|
• Strings: `"..."` (Lean style)
|
|
• Comments: `--` (Lean style — `%` is the modulo operator token)
|
|
• Matrices: `[1.0, 2.0; 3.0, 4.0]` (commas for cols, `;` for rows)
|
|
-/
|
|
|
|
open OctiveLean DSL
|
|
|
|
-- §1 LITERALS
|
|
octave! {
|
|
disp(3.14)
|
|
disp(42)
|
|
disp("hello")
|
|
disp(true)
|
|
}
|
|
|
|
-- §2 ASSIGNMENT
|
|
octave! {
|
|
x = 42;
|
|
disp(x)
|
|
}
|
|
|
|
-- §3 ARITHMETIC
|
|
octave! {
|
|
a = 10;
|
|
b = 3;
|
|
disp(a + b)
|
|
disp(a - b)
|
|
disp(a * b)
|
|
disp(a / b)
|
|
disp(a ^ b)
|
|
disp(a .* b)
|
|
disp(a ./ b)
|
|
disp(a .^ b)
|
|
}
|
|
|
|
-- §4 COMPARISON & LOGICAL
|
|
octave! {
|
|
disp(3 < 5)
|
|
disp(3 <= 3)
|
|
disp(3 == 3)
|
|
disp(3 != 4)
|
|
disp(1 && 0)
|
|
disp(1 || 0)
|
|
}
|
|
|
|
-- §5 UNARY
|
|
octave! {
|
|
disp(- 5)
|
|
disp(! true)
|
|
}
|
|
|
|
-- §6 MATRIX LITERALS
|
|
octave! {
|
|
row = [1, 2, 3, 4, 5];
|
|
M = [1, 2, 3; 4, 5, 6; 7, 8, 9];
|
|
disp(size(M))
|
|
}
|
|
|
|
-- §7 RANGES
|
|
octave! {
|
|
r = 1 : 5;
|
|
disp(length(r))
|
|
}
|
|
|
|
-- §8 IF / ELSEIF / ELSE
|
|
octave! {
|
|
x = 7;
|
|
if x > 10
|
|
disp("big")
|
|
elseif x > 5
|
|
disp("medium")
|
|
else
|
|
disp("small")
|
|
endif
|
|
}
|
|
|
|
-- §9 FOR LOOP
|
|
octave! {
|
|
s = 0;
|
|
for k = 1 : 5
|
|
s = s + k;
|
|
endfor
|
|
disp(s)
|
|
}
|
|
|
|
-- §10 WHILE LOOP
|
|
octave! {
|
|
n = 1;
|
|
while n < 32
|
|
n = n * 2;
|
|
endwhile
|
|
disp(n)
|
|
}
|
|
|
|
-- §11 FUNCTION DEFINITION
|
|
octave! {
|
|
function y = square(x)
|
|
y = x .^ 2;
|
|
endfunction
|
|
disp(square(7))
|
|
}
|
|
|
|
-- §12 RECURSIVE FUNCTION (factorial)
|
|
octave! {
|
|
function y = fact(n)
|
|
if n <= 1
|
|
y = 1;
|
|
else
|
|
y = n * fact(n - 1);
|
|
endif
|
|
endfunction
|
|
disp(fact(6))
|
|
}
|
|
|
|
-- §13 TRY / CATCH
|
|
octave! {
|
|
try
|
|
disp(undefined_xyz)
|
|
catch e
|
|
disp("caught an error")
|
|
end_try_catch
|
|
}
|
|
|
|
-- §14 BUILTINS — math
|
|
octave! {
|
|
disp(sqrt(2))
|
|
disp(abs(- 5))
|
|
disp(sin(0))
|
|
disp(cos(0))
|
|
disp(exp(1))
|
|
disp(log(exp(1)))
|
|
disp(floor(3.7))
|
|
disp(ceil(3.2))
|
|
disp(mod(17, 5))
|
|
disp(max([3, 1, 4, 1, 5]))
|
|
disp(min([3, 1, 4, 1, 5]))
|
|
disp(sum([1, 2, 3, 4, 5]))
|
|
disp(mean([1, 2, 3, 4, 5]))
|
|
disp(norm([3, 4]))
|
|
}
|
|
|
|
-- §15 BIND THE PARSED AST AS A LEAN TERM (for proof interop)
|
|
octave_program! mySumProgram {
|
|
s = 0;
|
|
for k = 1 : 10
|
|
s = s + k;
|
|
endfor
|
|
disp(s)
|
|
}
|
|
|
|
#check mySumProgram -- : Array OctiveLean.Stmt
|
|
#eval mySumProgram.size
|