Un vistazo a Koka
Koka es un lenguaje de programación:
- Funcional fuertemente tipado.
- Sistema de tipos con efectos.
- Handlers de efectos algebraicos.
- Compilación directa a C con referencia contada (Perceus).
- Optimización para reutilización en estilo funcional.
Hola, mundo en Koka
Para conocer el lenguaje no hay como crear el clásico programa de "Hola, mundo".
holamundo.kk
module holamundo fun main() { println("Hola, mundo en Koka") }
A primera vista nos recuerda un poco a Go o hasta Python.
Para ejecutar el programa abrimos una terminal y tecleamos::
$ koka holamundo.kk # O con este otro comando $ koka --execute holamundo.kk
Si todo va bien, se mostrará este mensaje en la consola:
Hola, mundo en Koka
REPL de Koka
Abrimos el REPL de koka:
$ koka
Veremos esto en la consola. Y escribiremos un sencillo mensaje:
_ _ | | | | | | _ ___ | | _ __ _ welcome to the koka interactive compiler | |/ / _ \| |/ / _' | version 3.2.3, Mar 18 2026, libc x64 (clang-cl) | ( (_) | ( (_| | output dir: .koka/v3.2.3/clang-cl-debug-240165 |_|\_\___/|_|\_\__,_| type :? for help, and :q to quit load : std/core load : std/core/types load : std/core/unsafe load : std/core/hnd load : std/core/exn load : std/core/undiv load : std/core/bool load : std/core/vector load : std/core/order load : std/core/char load : std/core/sslice load : std/core/either load : std/core/list load : std/core/string load : std/core/maybe load : std/core/tuple load : std/core/lazy load : std/core/delayed load : std/core/int load : std/core/show load : std/core/maybe2 load : std/core/console load : std/core/debug > println("Hola, mundo")
Si todo va bien lo veremos:
linking : std/core/@main created : .koka\v3.2.3\clang-cl-debug-240165\std_core__main.exe Hola, mundo
Una vez que ya ejecutamos el REPL, hagamos algunas pruebas:
> :t "Hola, mundo" string > :t 45.0 float64 > :t 9 int > :t '@' char > :t println("Hola") console/console ()
Quien haya usado el REPL de Haskell (ghci) le parecerá muy familiar. Con esto :t entrada verificamos el tipo de dato usado. Una entrada como está "Hola" nos dará el tipo string, una entrada como esta 33 nos dará un tipo int, una entrada 56.0 nos dará un tipo float64. Esto es importante pues, al igual que Haskell, Koka es un lenguaje que respeta los tipos de datos.
Aquí no aplica el dicho de "Una variable es una variable".
Artitmética en Koka
Realicemos algunas operaciones aritméticas en el REPL:
> 34 + 32 linking : std/core/@main created : .koka\v3.2.3\clang-cl-debug-240165\std_core__main.exe 66 > 56 / 45 linking : std/core/@main created : .koka\v3.2.3\clang-cl-debug-240165\std_core__main.exe 1 > 330 mod 300 ^ /@virtual/std/core/@main.kk(1, 7): parse error: invalid syntax unexpected /@virtual/std/core/@main.kk(1,7-1,9): identifier "mod" expecting ".", "(", "[", "{", "fn", operator, ":=", ";" or end of input > 330 % 300 linking : std/core/@main created : .koka\v3.2.3\clang-cl-debug-240165\std_core__main.exe 30 > 45 * 32 linking : std/core/@main created : .koka\v3.2.3\clang-cl-debug-240165\std_core__main.exe 1440 > 450 - 521 linking : std/core/@main created : .koka\v3.2.3\clang-cl-debug-240165\std_core__main.exe -71
Como vemos el operador mod no existe en este lenguaje, en su lugar empleamos el operador % para obtener el residuo de una división. Mientras que los demás operadores de suma, resta, multiplicación y división no son diferentes de otros lenguajes.
También podemos notar que incluso una sencilla operación lleva más tiempo de ser procesada o evaluada comparada a lo que se hace en el REPL de otros lenguajes (Haskell, Erland, Python, Elixir, etc.)
Salimos del REPL:
> :q
Programando en Koka
Crearemos algunos programas en este lenguaje para poderlo conocer mejor.
Fibonacci en Koka
Ejemplo 1. Crearemos un programa que calcule el fibonacci de un número.
fibonacci.kk
module fibonacci fun fib(n : int) : div int if n <= 0 then 0 elif n == 1 then 1 else fib(n - 1) + fib(n - 2) fun main() println(fib(5)) println(fib(12))
Ejecutamos el programa:
$ koka fibonacci.kk
Salida:
5 144
Factorial en Koka
Ejemplo 2. Crearemos un programa para calcular el factorial de un número.
factorial.kk
module factorial fun fact(n : int) : div int if n <= 0 then 0 elif n == 1 then 1 else n * fact(n - 1) fun main() println(fact(5)) println(fact(12))
Ejecutamos el programa:
$ koka factorial.kk
Salida:
120 479001600
Operaciones aritméticas en Koka
Ejemplo 3. Crearemos un programa para realizar operaciones aritméticas básicas: suma, resta, multiplicación y división.
operaciones.kk
module operaciones fun sumar(x : int, y: int) : div int x + y fun restar(x : int, y: int) : div int x - y fun mult(x : int, y: int) : div int x * y fun divi(x : int, y: int) : div int x / y fun main() println(sumar(5,4)) println(restar(324,87)) println(mult(3,7)) println(divi(330,2))
Ejecutamos el programa:
$ koka operaciones.kk
Salida:
9 237 21 165
Este es un vistazo rápido al lenguaje Koka.
Continuaremos más adelante con este y más temas sobre Haskell y la programación funcional
Enlaces:
https://koka-lang.github.io/koka/doc/index.htmlhttps://onlyhaskellforyou.blogspot.com/2026/06/koka-un-lenguaje-funcional-con-tipos-de.html
https://koka-lang.github.io/koka/doc/book.html
https://alquimistadecodigo.blogspot.com/2026/02/nuevos-lenguajes-de-programacion.html


Comentarios
Publicar un comentario