¿Cuáles son algunos lenguajes de programación que me permiten visualizar algoritmos?

Por lo general, los lenguajes de programación visual son lenguajes de flujo de datos como Max / MSP, LabVIEW y similares, pero voy a tocar mi propio claxon por un momento aquí y mencionaré mi primer lenguaje de programación esotérico, Spiral. No es de muy alto nivel de ninguna manera, pero la forma de los programas sugiere fuertemente su comportamiento y la naturaleza de los algoritmos subyacentes. En particular, los bucles son bucles literales de código, los condicionales se parecen mucho a los cuellos de botella protegidos a los que a menudo actúan, y la recursividad … en realidad no es algo fácil de hacer.

En un momento, tenía un intérprete interactivo de Java que le permitía adjuntar comentarios a caracteres individuales, recorrer el programa y ver todo su estado, incluidos todos los datos en deque, y generalmente tener una imagen mental completa de la ejecución del programa como yo fui. Es lo más cerca que he estado de encapsular algoritmos con mi mente.

Cualquiera, suficiente juego previo, aquí hay un programa Spiral:

[correo electrónico protegido] * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v
* ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^
v
^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v =
*** ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^
* *
********** v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ ##
* ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v #######################
v
^ * v ^ * v ^ * v ^ ************** v ^ * v ^ * v ^ * v ^ * v ^ * v ^ ********* * *
######### ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v * ^ v *** * *
# #
############### v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * v ^ * *
v * ^ v * ^ v * ^ v ************** ^ v
==== X @
i: vX ==: ==== [correo electrónico protegido] [correo electrónico protegido] i! == XX === v ^ ==
X vs.vuv @ === s = vv = X = $ v = v
= XX = #
[correo electrónico protegido] @X

Calcula la transformación ROT13 de la entrada. La sección superior es solo construir la tabla de traducción en la memoria. La parte inferior es la parte de traducción real. A la izquierda hay un bucle que lee un carácter, verifica si es EOF. De lo contrario, el puntero salta a la sección más a la derecha, que gira a través de la tabla de traducción para encontrar el carácter correcto para traducirlo. Esto devuelve el puntero a la izquierda donde se imprime el carácter. El puntero luego salta a la sección central donde la tabla de traducción se restaura a su estado original para que el ciclo pueda repetirse.

Puede ver fácilmente dónde están los bucles y las condiciones de ramificación, incluso si solo tiene la comprensión más rudimentaria del idioma. Es aún más fácil si tiene mi intérprete original que le muestra dónde está el puntero mientras se ejecuta, pero temo que el programa se pierda en las arenas del tiempo, a menos que alguien pueda motivarme un poco más para encontrarlo y restaurarlo. a la gloria completa.

Identifique las bibliotecas que hacen los tipos de cosas que desea; deja que esos dicten el idioma.

Como otros mencionaron, elegir un idioma no debería ser el factor determinante si su objetivo final es la visualización de algoritmos . Enfóquese primero en el enfoque (qué tan interactivo, puede aprovechar la visualización de datos , usará animación, etc.), luego elija qué bibliotecas . Eso puede muy bien limitar su lista de idiomas posibles a solo uno o dos.

Thx para el a2a

Los lenguajes de programación son un método para implementar algoritmos, pero no al revés. Hay entornos de programación que le permiten diseñar un diseño de GUI gráficamente e incluso crear el código necesario para implementar ese diseño, pero eso no es visualizar algoritmos.

Una vez que tenga un algoritmo en particular en mente, debería poder codificarlo en casi cualquier idioma (incluso he usado Commodore 64 BASIC para reír a veces). Por supuesto, algunos idiomas son más adecuados si se requieren grandes cantidades, bloques de memoria o estructuras de datos complejas.

Es difícil para un lenguaje de programación visualizar su código implícitamente. Por ejemplo, ¿qué pasa si codifica mal el algoritmo de djikstra? No creo que el lenguaje lo reconozca por sí solo.

En segundo lugar, no querrá ver bloques de memoria una y otra vez y muchos de ellos.

Pero hay algunas soluciones a su problema. La mayoría de IDE (como los bloques de código) hoy en día tienen depuradores incorporados que le permiten ver los bloques de memoria, las variables, el contenido de la matriz, etc.

Y luego están los lenguajes de intérpretes como MATLAB, PYTHON que le permiten ver lo que está sucediendo allí mismo. Por ejemplo, si escribes en MATLAB:

A = [1 2; 3 4]

Producirá lo siguiente para usted:

A = [1 2]

[3 4]