¿Qué lenguaje de programación crees que es el lenguaje más “un lenguaje te ayuda a pensar”?

Befunge es un hermoso lenguaje esotérico que te ayuda a pensar.
La forma en que Befunge controla el flujo del programa es realmente interesante (vea el enlace para la documentación); Es por esta razón que a menudo pierdo el tiempo pensando en formas lindas en las que puedo usar la sintaxis única de Befunge para resolver problemas fáciles.

Mi pieza favorita de código de Befunge (escrita por mí mismo) fue para el Desafío del Día de los Inocentes en el club de informática de mi escuela.

Aquí está la declaración del problema: Escriba un programa Befunge que imprima el código fuente de un programa Brainf ***, que imprima un programa HQ9 +, que imprima “¡Hola, mundo!”. El que tenga el código fuente más corto (número de caracteres que no sean espacios en blanco) gana.

Mi presentación (13 caracteres):

  "#> 56 ++ v
 ,: |  >
   @ 

¡Te animo a aprender Befunge y a encontrar tus propias soluciones!
La optimización de la longitud del código fuente es ciertamente un proceso de “ayuda a pensar”.

PS Aquí está la declaración del problema original: Lynbrook Computer Science

Pitón

Los motivos de la elección son:

  • Muchas construcciones de alto nivel (lista, diccionario, conjunto, montón, etc.)
  • Gran cantidad de funciones incorporadas
  • Gran cantidad de azúcar sintáctica
  • Gramática consistente y concisa.
  • Gran cantidad de paquetes externos.

todo = ['read', 'understand', 'share'] for task in todo: print 'I have to %s.' % task 

Nota: Interpreto “un lenguaje que ayuda a pensar” como uno que facilita el diseño y la implementación de soluciones.

Estándar ML

Ejemplo
Una función de computación factorial en SML es de esta forma:
factorial divertido n = si n = 0 entonces 1 sino n * factorial (n-1)

¡Usted puede literalmente ver la inducción en el trabajo!

1) Funciones
La forma común en que se escribe una función es:
diversión
dejar
algunas definiciones
en
cálculo
fin

y el cálculo es un comando “único” (que podría ser un comando compuesto en sí mismo), lo que permite al programador ver de un vistazo qué hace exactamente la función.

2) Tipos
Una vez que haya escrito un código y se lo pase al intérprete de ML, éste le mostrará y mostrará el tipo de cada función: entradas y salidas. Por lo tanto, es más fácil construir de forma incremental sobre este código, como saben para cada operación y función, qué tipo evaluarán los operandos, lo que simplificará considerablemente el proceso de depuración.

Utiliza tipos genéricos si la determinación exacta del tipo no es necesaria / posible.

3) Listas
Aquí es donde la inducción es más visible. Una lista se representa como [] (una lista vacía) o a :: al (‘a’ es el primer elemento, seguido de una lista ‘al’).

Algunos ejemplos en las listas:

  divertido añadir ([], l) = l
  |  añadir (h :: [], l) = h :: l
  |  append (h :: t, l) = h :: append (t, l);

 reversa divertida ([]) = []
  |  invertir (h :: t) = añadir (invertir (t), [h]);

 longitud de diversión ([]) = 0
  |  longitud (h :: t) = 1 + longitud (t);

 diversión zipIntoPairs ([], []) = []
   |  zipIntoPairs (h1 :: t1, h2 :: t2) = (h1, h2) :: zipIntoPairs (t1, t2);

 mapa divertido (f, []) = []
  |  mapa (f, h :: t) = f (h) :: mapa (f, t);

Esquema.

Me sorprende que no se haya mencionado aún. El esquema es muy fácil de aprender, tiene un enfoque matemático muy funcional del pensamiento y, a su vez, el código que se escribe en otros idiomas se enfoca de manera más lógica y estructurada. He oído a la gente decir que un efecto secundario del plan de aprendizaje es que te vuelves más inteligente, les creo. ¡Tienes que probarlo y ver la belleza de Scheme!

Acabo de encontrar el lenguaje wolfram, un enorme lenguaje basado en el conocimiento, con un algoritmo sofisticado, que funciona de manera coherente. Mira

Puedes hacer cualquier cosa y todo a partir de eso.

TI-Basic.

Optimice a medida que vaya, encuentre la solución más pequeña o más rápida. Aprende a usar el esfuerzo al leer el código.

DO.

Cadenas de expresión. Basta de charla.

Montaje.
1. Tienes que conocer tu hardware.
2. Tienes que saber dónde están almacenando tus instrucciones.