Traduciendo morse con Prolog

Ayer estaba tumbado en la cama pensando en nimiedades (qué nos depara el futuro, cuál es el sentido de la vida, a qué huele un Cloud Computing…) cuando pensé lo mucho que molaría aprender morse. Así que saqué una cheatsheet del lenguaje y me interrogué, ¿cuál puede ser la forma más fácil de aprender? Está claro que siguiendo el orden alfabético no. Una A es un punto y una raya, mientras que una E es solo un punto, y dos puntos hacen una I, y… No, no es la forma más fácil. En un primer momento pensé que representar el lenguaje en una especie de autómata que cambiase de estado con puntos, rayas y tiempos haría un buen mapa que poder aprender por secciones. Pero, por supuesto, hay una forma más fácil. Si únicamente tenemos en cuenta los puntos y los espacios para cambia el autómata de estado, ¿qué tenemos? Un árbol binario. Así que tras una breve búsqueda, resulta que sí, que morse se puede representar como un árbol binario bastante bien equilibrado.

Figura 1: la codificación morse como árbol binario

Figura 1: la codificación morse como árbol binario

¿Y en qué lenguaje de programación es muy sencillo representar árboles? Efectivamente, Prolog. Mediante el predicado transition(Origin, Character, Destination) representamos las transiciones dentro del árbol. Por ejemplo, transition(start, ‘.’, e) o transition(e, ‘-‘, a). Si introducimos una secuencia morse mal codificada, en algún momento se caerá en una transición que no esté entre los hechos y el predicado no unificará, por lo que la traducción sencillamente fallará sin tener que preocuparnos más del resto.

Sigue leyendo