Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Entorno de desarrollo SWI-Prolog

Uso SWI-Prolog, una de las implementaciones más potentes y populares del lenguaje. Para Windows, está disponible un entorno de desarrollo compuesto básicamente por:

    <li>Un panel dónde escribir código con resaltado de sintáxis.</li>
    
    <li>Botones para hacer cosas como consultar el archivo que estamos editando (esto es compilarlo y cargarlo en memoria para poder hacer consultas sobre él).</li>
    
    <li>Un panel dónde realizar consultas.</li>
    

    En los sistemas operativos basados en Linux (como Ubuntu) no existe un entorno similar. Los programadores full-time Prolog deben tener su forma de solucionarlo. Yo encontré la mía. Puede no ser la mejor, pero es más cómoda que tipear por un lado, tener el intérprete abierto por otro e ir consultando luego de cada modificación.

    De hecho, la misma implementación trae algunas primitivas útiles que se pueden usar desde el lenguaje. Por ejemplo:

    ?- consult('cats.pdb').
    
    % cats.pdb compiled 0.01 sec, 1,664 bytes
    
    true.

    compilará el archivo cats.pdb y los hechos y reglas definidos en él estarán disponibles para nuestras consultas. Si modificamos el archivo fuente, luego debemos hacer:

    ?- reconsult('cats.pdb').
    
    % cats.pdb compiled 0.00 sec, 0 bytes
    
    true.

    para que las modificaciones tengan efecto. Encontré otro predicamo muy útil:

    ?- edit('cats.pdb').
    
    % Waiting for editor ...
    
    % Running make to reload modified files
    
    % /home/juanjo/prolog/cats.pdb compiled 0.00 sec, 124 bytes
    
    % Scanning references for 1 possibly undefined predicates
    
    true.

    Abrirá el editor por defecto configurado en la computadora, nos permitirá editar el archivo y cuando lo guardemos retorna true al intérprete. Ahora lo que antes hacíamos a mano, podemos hacerlo desde el intérprete. Un avance, pero se pone mejor: podemos usar estos predicados Prolog para escribir una regla que haga todo por nosotros. Yo uso:

    myedit(File) :-
    
    edit(File), reconsult(File).
    
    myedit(File) :-
    
    edit(file(File)), reconsult(File).

    ¿Cómo funciona? Primero notemos que son dos reglas. La primera recibe un nombre de archivo e intenta editarlo, si el archivo existe se abre el editor, editamos, cuando lo guardamos edit(File) evalúa true y se pasa al siguiente hecho que reconsulta el archivo y listo.

    Si el archivo no existe, la primer regla no termina y se pasa a la segunda. file(File) se encarga de crearlo y edit podrá editarlo, trabajamos y todo termina como en el caso anterior.

    Podemos escribir este código en el archivo .plrc de nuestra home para que sea cargado al iniciar el intérprete. Finalmente si utilizamos la extensión .pdb, vim se encarga de cargar el resaltado correspondiente a la sintácis de Prolog.


    Herramientas

    Los programadores que usamos Python, no dependemos de herramientas externas al lenguaje en la forma que se depende de ellas cuando se usa un lenguaje como Java.

    I can't tell you how many times I've heard people say they wouldn't use Ruby because it lacks automated refactoring tools. Ruby doesn't actually need them in the way Java does; it's like refusing to switch to an electric car because there's no place to put the gasoline. But programmers are a stubborn bunch, and to win them over you have to give them what they think they want.

    http://steve-yegge.blogspot.com/2007/02/next-big-language.html



    Código re-editable

    "Debo confesar un fuerte prejuicio en contra de la moda del código reusable. Para mí, "el código re-editable" es mucho, mucho mejor que una caja negra intocable."

    -- Donald E. Knuth

    Donald Ervin Knuth, es uno de los más reconocidos expertos en ciencias de la computación por su seminal investigación dentro del análisis de algoritmos y compiladores. Es Profesor Emérito de la Universidad de Stanford.

    Se le conoce principalmente por ser el autor de la obra The art of computer programming (El arte de programar computadoras), una de las más respetadas referencias en el campo de las ciencias de la computación. Sentó las bases de y dio nombre al análisis de algoritmos y ha realizado numerosos aportes a varias ramas teóricas de la informática. Es el creador de TEX, del sistema de diseño de tipos METAFONT y del estilo de programación conocido como programación literaria (Literate programming).

    Fuente: Wikipedia

    Página web del autor: http://www-cs-faculty.stanford.edu/~knuth/

    Este post es parte de Citas sobre programación.