Heza es un lenguaje de programación especializado diseñado para la comunidad matemática y lógica. Su sintaxis incorpora notación matemática nativa, permitiendo una expresión más natural de conceptos matemáticos complejos.
Características principales:
- Notación matemática integrada
- Manipulación simbólica de expresiones
- Tipos de datos especializados para matemáticas
- Sintaxis declarativa y funcional
- Extensión de archivos:
.hz
Qué hace: Permite agregar anotaciones en el código que son ignoradas por el intérprete
Sintaxis: @ texto del comentario
Ejemplo:
@ Este es un comentario en Heza
@ Calculadora de números primos
data- Declaración de variablestrace- Activa el historial de cambiosas- Asigna alias a condicionesend- Termina bloques de códigouse- Declara condicionesplay- Reproduce bloques de código (bucles while)
TAB- TabulaciónESP- Espacio en blancoLINE- Salto de líneaFALSE- Valor booleano falsoTRUE- Valor booleano verdadero∅- Valor nulo (NONE)∞- Infinito (INFINITE)PI- Constante πE- Constante e
+- Suma-- Resta*- Multiplicación%- Módulo^- Potencia/- División
Qué hace: Asigna valores a variables
Sintaxis: ←
Ejemplo:
data x ← 10
data resultado ← x + 5
∧- AND (conjunción)¬- NOT (negación)∨- OR (disyunción)
=- Igual≠- Diferente>- Mayor<- Menor>=- Mayor o igual<=- Menor o igual∈- Pertenencia (pertenece a)
√- Raíz cuadrada∏- Productoria∑- Sumatoria∂- Derivada∫- Integral|x|- Valor absoluto!x- Factorialeval- Evaluación de expresioneslim- Límites
Lista completa:
sign- Función signoroot- Raíz n-ésimasqrt- Raíz cuadradaatanh, acosh, asinh- Funciones hiperbólicas inversastanh, cosh, sinh- Funciones hiperbólicasarctan, arccos, arcsin- Funciones trigonométricas inversascitan, sec, cosec- Funciones trigonométricas adicionalesexp, ln, log- Funciones exponenciales y logarítmicastan, cos, sin- Funciones trigonométricas básicas
→>- UNIQUE (ejecuta un solo comando)→- THEN (entonces, para bloques)⟹- OUT (salida por consola)⟸- IN (entrada por consola)∀- FOREACH (para cada elemento)∃- EXIST (existe al menos un elemento):- REFERENCE (referencia en comprehensions)≔- DEFINICIÓN (definición de funciones)
- Numéricos:
1212,1212.343(enteros y decimales) - Booleanos:
FALSE,TRUE(valores lógicos) - Textos:
"Hello"(cadenas de caracteres) - Expresiones:
'x^2'(expresiones matemáticas sin evaluar) - Conjuntos:
{4,7.4,"67",FALSE}(colecciones de elementos) - Condiciones:
use x>3(expresiones condicionales) - Referencias:
my_var(referencias a variables)
Qué hace: Declara una variable sin asignación inicial
Sintaxis: data var
Ejemplo:
data x
data y
Qué hace: Declara y asigna valor a una variable
Sintaxis: data var ← valor
Ejemplo:
data nombre ← "Juan"
data edad ← 25
Qué hace: Declara varias variables simultáneamente
Sintaxis: data x,y,z
Ejemplo:
data a,b,c
Qué hace: Declara y asigna valores a múltiples variables
Sintaxis: data x ← 10, y, z ← 5
Ejemplo:
data x ← 10, y, z ← 5
Qué hace: Activa el historial de cambios para variables
Sintaxis: data trace var1,var2,...
Ejemplo:
data trace contador, resultado
Qué hace: Permite reasignar múltiples variables simultáneamente
Sintaxis: a,b,c ← b,c,4
Ejemplo:
data a ← 1, b ← 2, c ← 3
a,b,c ← b,c,4
⟹ a,b,c @ Salida: 2, 3, 4
Qué hace: Lee valores desde la consola
Sintaxis: ⟸ var1,var2...
Ejemplo:
data nombre, edad
⟸ nombre, edad
Qué hace: Muestra valores en la consola
Sintaxis: ⟹ val1,val2...
Ejemplo:
⟹ "Hola mundo"
⟹ "El resultado es:", resultado, LINE
Qué hace: Crea un conjunto enumerando sus elementos
Sintaxis: {elemento1, elemento2, ...}
Ejemplo:
data arr ← {1,2,3,4,5,6,7,8,9,10}
Qué hace: Genera secuencias numéricas
Sintaxis: [inicio..fin] (incluyendo ambos extremos)
Ejemplo:
data arr ← [1..10] @ {1,2,3,4,5,6,7,8,9,10}
Qué hace: Genera secuencias con incremento específico
Sintaxis: [inicio..fin:paso]
Ejemplo:
data arr ← [1..10:2] @ {1,3,5,7,9}
Qué hace: Filtra elementos de un conjunto según una condición
Sintaxis: {x ∈ conjunto_padre : condicion}
Ejemplo:
data conjunto_padre ← [1..10]
data subconjunto ← {x ∈ conjunto_padre : x%2=0}
@ Resultado: {2,4,6,8,10}
Qué hace: Aplica una función a todos los elementos de un conjunto
Sintaxis: {f(x) | x ∈ conjunto_padre}
Ejemplo:
data conjunto_padre ← {5,6,7}
data transformado ← {x*2 | x ∈ conjunto_padre}
@ Resultado: {10,12,14}
Qué hace: Combina elementos de múltiples conjuntos
Sintaxis: { {x,y} | x ∈ A, y ∈ B }
Ejemplo:
data A ← [1..10]
data B ← [10..1]
data C ← { {x,y} | x ∈ A, y ∈ B }
@ Resultado: {{6, 5}, {7, 4}, {8, 3}, {9, 2}, {10, 1}}
Qué hace: Combina elementos con filtrado
Sintaxis: { {x,y} | x ∈ A, y ∈ B : x>y }
Ejemplo:
data A ← [1..10]
data B ← [10..1]
data C ← { {x,y} | x ∈ A, y ∈ B : x>y }
Qué hace: Verifica si todos los elementos cumplen una condición
Sintaxis: ∀ x ∈ set : condicion
Ejemplo:
data conjunto ← {2,4,6,8}
data resultado ← ∀ x ∈ conjunto : x%2=0
@ Resultado: TRUE
Qué hace: Verifica si al menos un elemento cumple una condición
Sintaxis: ∃ x ∈ set : condicion
Ejemplo:
data conjunto ← {1,3,5,8}
data resultado ← ∃ x ∈ conjunto : x%2=0
@ Resultado: TRUE
Qué hace: Crea expresiones matemáticas sin evaluar
Sintaxis: 'expresion_matematica'
Ejemplo:
data funcion ← 'x+4'
data texto ← "x - 6"
data expre ← 'texto' @ Referencia a variable texto
Qué hace: Combina múltiples expresiones
Sintaxis: 'expresion1 operador expresion2'
Ejemplo:
data e1 ← 'x - 45'
data e2 ← 'e1 / 2'
data e3 ← '5 * e1 - e2 * sin(x)'
Qué hace: Evalúa expresiones sustituyendo variables
Sintaxis: eval(expr) o eval(expr, var → valor)
Ejemplo:
data expr ← 'x+5'
data x ← 5
⟹ eval(expr) @ Resultado: 10 (como Expresión)
data expr2 ← 'x+5-y'
data x ← 6
⟹ eval(expr2, y → 3) @ Resultado: x+2
Qué hace: Convierte una expresión evaluada a tipo numérico
Sintaxis: Num(expresion)
Ejemplo:
data expr ← '5+3'
data numero ← Num(eval(expr))
Qué hace: Calcula la suma de una operación sobre un conjunto
Sintaxis: ∑(x ∈ conjunto, operacion)
Ejemplo:
⟹ ∑(x ∈ {1,2,4}, x^2) @ Resultado: 21
⟹ ∑(x ∈ [0..10:5], x) @ Resultado: 15
Qué hace: Calcula el producto de una operación sobre un conjunto
Sintaxis: ∏(x ∈ conjunto, operacion)
Ejemplo:
⟹ ∏(x ∈ [1..5], x) @ Resultado: 120
⟹ ∏(x ∈ {0,4,2}, x+1) @ Resultado: 15
Qué hace: Combina expresiones con sumatorias/productorias
Sintaxis: ∑(k ∈ conjunto, Num(eval(expresion, var → k)))
Ejemplo:
data e ← 'x * 2'
⟹ ∑(k ∈ {0,5,10}, Num(eval(e, x → k))) @ Resultado: 30
Qué hace: Ejecuta un comando para cada elemento
Sintaxis: ∀ var ∈ conjunto →> comando
Ejemplo:
∀ var ∈ {"Hello"," Word"} →> ⟹ var
@ Salida: Hello Word
Qué hace: Ejecuta múltiples comandos para cada elemento Sintaxis:
∀ var ∈ conjunto →
comando1
comando2
end:var
Ejemplo:
∀ x ∈ [1..10] →
data aux ← ∑(k ∈ [1..x], k)
⟹ aux,LINE
end:x
Qué hace: Itera sobre múltiples conjuntos simultáneamente
Sintaxis: ∀ x ∈ A, y ∈ B → ... end:x
Ejemplo:
data A ← [1..10]
data B ← [10..1]
∀ x ∈ A, y ∈ B →
⟹ x, " * ", y, " = ", x*y, LINE
end:x
Qué hace: Calcula el límite de una expresión
Sintaxis: lim(expr, var → valor)
Ejemplo:
data funcion ← 'x^2'
data expresion ← '(eval(funcion, x → x+h) - funcion) / h'
⟹ lim(expresion, h → 0) @ Resultado: 2*x
Qué hace: Calcula la derivada de una expresión
Sintaxis: ∂(expr, var)
Ejemplo:
⟹ ∂('x^2',x) @ Resultado: 2*x
Qué hace: Calcula la integral indefinida
Sintaxis: ∫(expr, var)
Ejemplo:
⟹ ∫('ln(x)/(2*x)',x) @ Resultado: log(x)^2/4
Qué hace: Calcula la integral definida entre límites
Sintaxis: ∫(expr, var ∈ [limI..limS])
Ejemplo:
⟹ ∫('3*x^2', x ∈ [0..2]) @ Resultado: 8
Qué hace: Crea funciones reutilizables Sintaxis:
≔ (parametros) as nombre →
bloque de código
↩ valor_retorno
end:nombre
Ejemplo:
≔ (nombre) as saludar →
⟹ "Hola, ",nombre,"!"
end:saludar
≔ (n) as sumatoria →
↩ ∑(k ∈ [1..n], k)
end:sumatoria
Qué hace: Ejecuta una función definida
Sintaxis: nombre_funcion(argumentos)
Ejemplo:
saludar("Mundo")
⟹ sumatoria(4) @ Resultado: 10
Qué hace: Accede a elementos específicos por posición
Sintaxis: conjunto{indice}
Ejemplo:
data mi_conjunto ← {10,20,30,40}
⟹ mi_conjunto{2} @ Resultado: 20
data texto ← "Hola"
⟹ texto{1} @ Resultado: "H"
Qué hace: Crea condiciones reutilizables
Sintaxis: use condicion as alias
Ejemplo:
use edad>18 as mayor
Qué hace: Ejecuta código si se cumple una condición Sintaxis:
condicion? →
@ bloque si se cumple
end:condicion
Qué hace: Ejecuta diferentes bloques según condición Sintaxis:
condicion? →
@ bloque si verdadero
¬ →
@ bloque si falso
end:condicion
Ejemplo:
use edad>=18 as esMayor
data edad ⟸ edad
esMayor? →
⟹ "Es mayor de edad"
¬ →
⟹ "Es menor de edad"
end:esMayor
Qué hace: Declara y evalúa una condición inmediatamente
Sintaxis: use condicion as alias? → ... end:alias
Ejemplo:
data num ⟸ num
use num % 2 = 0 as esPar? →
⟹ "Es par"
¬ →
⟹ "Es impar"
end:esPar
Qué hace: Selecciona valores basados en condiciones
Sintaxis: condicion? → valorVerdadero ¬ → valorFalso
Ejemplo:
data a ← 6, b ← 8
use a>b as comparacion
⟹ comparacion? → a ¬ → b, " es mayor"
≔ (a,b) as max →
use a>b as cond
↩ cond? → a ¬ → b
end:max
Qué hace: Itera sobre un rango de valores
Sintaxis: ∀ i ∈ [limI..limS] → ... end:i
Ejemplo:
∀ i ∈ [1..10] →
⟹ "Iteración:", i
end:i
En una línea:
∀ i ∈ [1..10] →> ⟹ "Número:", i
Qué hace: Ejecuta código mientras se cumple una condición Sintaxis:
condicion? → play
@ cuerpo del bucle
end:condicion
Ejemplo:
data contador ← 0
use contador < 5 as condicion? → play
⟹ "Contador:", contador
data contador ← contador + 1
end:condicion
Qué hace: Bucle while con bloque alternativo si no se ejecuta Sintaxis:
condicion? → play
@ cuerpo del bucle
¬ →
@ bloque si no se ejecuta
end:condicion
Qué hace: Habilita el historial de cambios para variables
Sintaxis: data trace var1,var2,...
Ejemplo:
data trace contador, resultado
Qué hace: Obtiene el historial de cambios de una variable
Sintaxis: trace:var
Ejemplo:
data trace x
data x ← 1
data x ← 2
data x ← 3
⟹ trace:x @ Muestra historial de cambios
Num(exp)- Convierte expresión a númeroInteger(str)- Convierte texto a enteroString(num/conjunto)- Convierte a texto
ToLowerCase(texto)- Convierte a minúsculasToUpperCase(texto)- Convierte a mayúsculasRepeat(text, veces)- Repite textoSize(conjunto/texto)- Obtiene tamaño/cantidad
R(i,s)- Número aleatorio entre i y sPressed("key")- Verifica si tecla está presionadaWait(milisegundos)- Espera en milisegundosKey()- Espera presión de teclaDate()- Fecha actualTime()- Hora actual
Talk(text)- Convierte texto a voz (español)Ear()- Escucha por micrófono y devuelve textoSearch(text)- Busca en Wikipedia y devuelve texto