Lunfardo está fuertemente basado (por el momento) en: Juro que no es Rick Roll
Es un esolang interpretado escrito en Python 3, por ende si Python es lento, Lunfardo es dos veces más lento, ó tres, ó mas ya que todavía no hay una función que mida el tiempo. La idea del lenguaje es divertirse!
- Requerimiento: tener instalado Python 3
- Clonar el repositorio
cd src
python3 run.py
Inmediatamente se puede empezar a usar el intérprete, pero también podemos escribir nuevos archivos.
Para ejecutar archivos
ejecutar(<nombre_del_archivo_en_strings>)
Ej:ejecutar("factorial.lunf")
Nota: el archivo debe estar dentro de la carpeta src/examples
por el momento.
Si querés cambiar esto, al final del archivo src/lunfardo_types/laburo.py
podés encontrar
el método exec_ejecutar()
en donde se comprueba esta ruta.
Nota: los []
significa que es un parámetro opcional.
Numero
: entero | float
Ej:1
,1.5
Chamuyo
: string
Ej:"Hola Argentina!"
Boolean
: bool =posta
|trucho
Nada
: null =nada
poneleque <identificador> = <expresión> | <valor>
Ej:poneleque numero = 10
,poneleque variable = (10 + 10) y trucho
Coso
: lista =[]
Ej:poneleque lista = [1, 2, 3]
Mataburros
: dict ={}
Ej:poneleque dict = {"1": 1, 2: "dos", var: otra_var}
+
: sumar
Ej:poneleque numero = 10 + 10
-
: restar
Ej:poneleque numero = 10 - 10
*
: multiplicar
Ej:poneleque numero = 10 * 10
/
: dividir
Ej:poneleque numero = 10 / 10
^
: potencia
Ej:poneleque numero = 10 ^ 10
y
Ej:poneleque valor = 10 y 10
-> retorna:posta
o
Ej:poneleque valor = 10 o 10
-> retorna:posta
truchar
Ej:poneleque valor = truchar 10 == 10
-> retorna:trucho
porque10 == 10
esposta
.
=
Ej:poneleque numero = 10
==
Ej:si 10 == 10 entonces poneleque valor = 10
!=
Ej:si 10 != 10 entonces poneleque valor = 245
<
Ej:si 0 < 10 entonces poneleque valor = 9
>
Ej:si 20 > 10 entonces poneleque valor = 20
<=
Ej:si 4 <= 10 entonces poneleque valor = 4
>=
Ej:si 14 >= 10 entonces poneleque valor = 14
si <condicion> entonces <sentencia>
[osi <condicion> entonces <sentencia>]
[sino <sentencia>]
para <identificador = valor> hasta <condicion> [entre <valor>] entonces <sentencia> chau
Si no se especifica un valor paraentre
, su valor es 1.
mientras <condicion> entonces <sentencia> chau
Hay dos tipos de funciones, que en Lunfardo se llaman: Laburo
y Curro
.
Las funciones se pueden referenciar.
laburo <identificador>([identificador[, identificador]]): <sentencia> chau
Laburos definidos por el usuario.
Un curro es un laburo pre-definido.
matear([identificador | valor])
Imprime en pantalla un valormorfar([identificador | valor])
Toma un valor por tecladowinpiavidrios()
Limpia la pantalla para windowslinpiavidrios()
Limpia la pantalla para linuxes_num(<identificador | valor>)
Devuelveposta
si es un numero,trucho
si no lo es.es_chamu(<identificador | valor>)
Devuelveposta
si es un chamuyo,trucho
si no lo es.es_coso(<identificador | valor>)
Devuelveposta
si es un coso,trucho
si no lo es.es_mataburros(<identificador | valor>)
Devuelveposta
si es un mataburros,trucho
si no lo es.es_laburo(<identificador | valor>)
Devuelveposta
si es un laburo,trucho
si no lo es.guardar(<coso>, <valor>)
Guarda un valor en un cososacar(<coso>, <indice>)
Saca un valor de un coso en el índice especificadoextender(<coso>, <coso>)
Extiende un coso con los valores de sino cosocambiaso(<coso>, <indice>, <valor>)
Reemplaza un valor en un coso en el índice especificadoinsertar(<coso>, <indice>, <valor>)
Inserta un valor en un coso en el índice especificadolongitud(<coso | chamuyo | mataburros>)
Devuelve la longitud de un coso | chamuyo | mataburrosmetele_en(<mataburros>, <clave>, <valor>)
Guarda un valor en la clave especificada de un mataburros.
Si la clave no está presente, se crea.agarra_de(<mataburros>, <clave>)
Devuelve el valor de una clave de un mataburros.borra_de(<mataburros>, <clave>)
Borra una clave de un mataburros.existe_clave(<mataburros>, <clave>)
Devuelveposta
si la clave existe en el mataburros,trucho
si no.num(<identificador | valor>)
Convierte un chamuyo a numerochamu(<identificador | valor>)
Convierte un numero a un chamuyoejecutar(<chamuyo>)
Ejecuta el codigo de un archivo Lunfardorenuncio()
Termina la ejecución del intérprete de Lunfardo.
Flaco, fijate que metiste un carácter mal
Caracter IlegalNo te entiendo nada, boludo
Sintaxis IncorrectaFlaco, fijate que te olvidaste de un carácter
Se esperaba un carácterError en tiempo de ejecución
poneleque
y
o
truchar
si
entonces
osi
sino
para
hasta
entre
mientras
laburo
devolver
continuar
rajar
chau
#
Ej:# Esto es un comentario, y esta línea va a ser ignorada por el intérprete
matear("Hola, Mundo!")
laburo factorial(n)
si n <= 1 entonces
devolver 1
sino
devolver n * factorial(n - 1)
chau
chau
poneleque numero = 10
poneleque resultado = factorial(numero)
matear("El factorial de " + chamu(numero) + " es: " + chamu(resultado))
laburo fibonacci(n)
si n <= 1 entonces
devolver n
sino
devolver fibonacci(n - 1) + fibonacci(n - 2)
chau
chau
poneleque var = 10
poneleque secuencia = []
para i = 0 hasta var entonces
guardar(secuencia, fibonacci(i))
chau
matear("Secuencia de Fibonacci de longitud " + chamu(var) + ": " + chamu(secuencia))
laburo crear_cuenta(cuentas, nombre, balance_inicial)
metele_en(cuentas, nombre, balance_inicial)
matear("Cuenta creada satisfactoriamente!")
chau
laburo deposito(cuentas, nombre, cantidad)
si existe_clave(cuentas, nombre) entonces
si cantidad > 0 entonces
poneleque balance_actual = agarra_de(cuentas, nombre)
poneleque nuevo_balance = balance_actual + cantidad
metele_en(cuentas, nombre, nuevo_balance)
matear("Deposito realizado. Nuevo balance: " + chamu(nuevo_balance))
sino
matear("No se puede depositar una cantidad negativa")
chau
sino
matear("La cuenta no existe")
chau
chau
laburo retiro(cuentas, nombre, cantidad)
si existe_clave(cuentas, nombre) entonces
si (cantidad >= 0) y (cantidad <= agarra_de(cuentas, nombre)) entonces
poneleque balance_actual = agarra_de(cuentas, nombre)
poneleque nuevo_balance = balance_actual - cantidad
metele_en(cuentas, nombre, nuevo_balance)
matear("Retiro realizado. Nuevo balance: " + chamu(nuevo_balance))
sino
matear("No se puede retirar una cantidad negativa o mayor al balance")
chau
sino
matear("La cuenta no existe")
chau
chau
laburo balance(cuentas, nombre)
si existe_clave(cuentas, nombre) entonces
matear("Balance: " + chamu(agarra_de(cuentas, nombre)))
sino
matear("La cuenta no existe")
chau
chau
poneleque cuentas_db = {}
mientras posta entonces
matear("1. Crear cuenta")
matear("2. Deposito")
matear("3. Retiro")
matear("4. Balance")
matear("5. Salir")
poneleque opcion = num(morfar("Seleccione una opcion: "))
si opcion == 1 entonces
poneleque nombre = morfar("Nombre de la cuenta: ")
poneleque balance_inicial = num(morfar("Balance inicial: "))
crear_cuenta(cuentas_db, nombre, balance_inicial)
osi opcion == 2 entonces
poneleque nombre = morfar("Nombre de la cuenta: ")
poneleque cantidad = num(morfar("Cantidad a depositar: "))
deposito(cuentas_db, nombre, cantidad)
osi opcion == 3 entonces
poneleque nombre = morfar("Nombre de la cuenta: ")
poneleque cantidad = num(morfar("Cantidad a retirar: "))
retiro(cuentas_db, nombre, cantidad)
osi opcion == 4 entonces
poneleque nombre = morfar("Nombre de la cuenta: ")
balance(cuentas_db, nombre)
osi opcion == 5 entonces
matear("Gracias por confiar en nuestro banco.")
rajar
sino
matear("Opcion invalida")
chau
chau
Se acepta todo tipo de sugerencias y pull requests. Si tenés alguna idea, o si lo probaste y te encontraste con muchos bugs:
- Forkeá el proyecto
- Codeá tu código lindis
- Hacé un pull request
Si tenés alguna idea pero no tenés código, o por la razón que sea no podés contribuir de esa manera, podés abrir un Issue.
También recibo mensajes de correo electrónico en: sebastianper2018@gmail.com con ideas, sugerencias y preguntas.
- [] Importar archivos de código.
- [] Más tipos de errores, como errores que comprueben tipos de dato.
- [] OOP, herencia.