¿Por qué es Forth el lenguaje de programación para practicar la escritura de algoritmos?

Forth se usa principalmente en sistemas embebidos (como NASA, satélite Cassini, transbordadores espaciales, etc.) y en firmware (como computadoras SUN, etc.) (generalmente: donde se necesita un tamaño pequeño, velocidad en tiempo real y poca energía). No es un lenguaje convencional y no se recomienda para un programador promedio. Para ellos, un lenguaje conocido es mejor, como puede ver en la otra respuesta. Pero para el hobby o para aprender cómo funcionan las computadoras y los compiladores (pilas, aritmética RPN, etc.), no es una pérdida de tiempo. Puedes crear tu “lenguaje orientado a problemas”, tu propio Universo. Chuck Moore (inventor de Forth) dice: “ANSI Forth no es Forth”.

Chuck Moore, creo, entiendo esta oración. Su idea original: “Construye tu propio Forth solo con unas pocas palabras primitivas”. (20-30 son suficientes)

Aquí hay un mínimo de Forth (gracias, Helmar Wodtke …):

Aquí hay poderes de 2 desde cero, con el intérprete mínimo de Forth:

Aquí hay algo de Forth: Respuesta del usuario de Quora a ¿Cómo se crea un lenguaje de programación?

Nunca lo he pensado de esa manera, pero si puedes implementar un algoritmo en Forth, no tendrás muchos problemas para hacerlo en otros idiomas. Esto no es porque sea difícil; es porque ha desglosado el problema y ahora lo comprende a un nivel que puede implementarse fácilmente en cualquier idioma. Ese concepto a menudo se denomina “pensar” e incluso hay un buen libro con el mismo título.

Para qué idioma, creo que no importa siempre que lo desgloses y entiendas los principios. Hacer algo en Python, Java o C ++ usando algunas de las rutinas más avanzadas no le enseña cómo construir o los aspectos de diseño de esas tecnologías subyacentes. Una vez que comprenda los fundamentos, usar las versiones bien implementadas en un idioma es la versión de nuestra industria de estar sobre los hombros de los gigantes.

No te preocupes por el idioma; solo juega y comprende los fundamentos.

Forth es popular entre algunos programadores por una variedad de razones, algunas de las cuales son las siguientes:

  1. No hay verificación de tipo (por lo tanto, no hay declaraciones de tipo o conversiones forzadas con las que lidiar) que se interponga en su camino. Si desea sacar la raíz cuadrada o el coseno de una dirección, Forth no se interpondrá en su camino.
  2. Forth es altamente interactivo. Pasar parámetros y recibir resultados de las funciones de Forth es fácil. Por lo tanto, probar cada función recién definida es fácil.
  3. El flujo del programa ocurre en la pila, como con una calculadora HP RPN. Por lo tanto, los parámetros en una función están fácilmente disponibles en la consola en todo momento, no ocultos.
  4. Una vez que te acostumbras a la pila, Forth realmente no es diferente de otros lenguajes de programación. Todos los componentes básicos para escribir programas están ahí: bucles, sentencias condicionales if-else-then, etc.
  5. La cuarta sintaxis es concisa y de forma libre, lo que permite al programador la máxima facilidad y flexibilidad al escribir programas.
  6. Forth está inherentemente estructurado. No hay declaraciones de goto ni números de línea.
  7. Otros han mencionado las razones por las cuales Forth también puede ser popular para aplicaciones integradas donde el tamaño del código, el consumo de energía, etc. son importantes.

Ahora no sé si lo anterior significa que Forth es el mejor lenguaje de programación para escribir algoritmos (7. no lo es). Espero que sea una decisión de juicio para cada programador.

De Wikipedia: Algoritmo

La solución de ejemplo dada en Básico para el algoritmo divisor común más grande de Euclides:

10 ENTRADA A, B

20 SI B = 0 ENTONCES GOTO 80

30 SI A> B LUEGO VAYA 60

40 LET B = BA

50 GOTO 20

60 DEJA A = AB

70 GOTO 20

80 IMPRIMIR A

90 FIN

El programa equivalente escrito en Forth:

: mcd {ab -}

empezar

b 0>

mientras

ab> if ab – a un

más ba – a b

luego

repetir a. ;

Prueba: 3009884 gcd 17

Usando la consola Forth, los parámetros de entrada se pasan implícitamente en la pila a la función gcd y el resultado se imprime en la consola allí mismo (. O “punto” es el comando de impresión de Forth). Este ejemplo de la solución Forth utiliza parámetros locales con nombre que algunos objetan pero que encuentro útil especialmente para desarrollar una nueva función.

El programa es un bucle definido por comenzar … mientras … repetir. El while mira el resultado de b> 0 (o b 0> en RPN) y continúa la ejecución al if condicional mientras el resultado es verdadero. Cuando se alcanza la repetición, el programa regresa para comenzar. O mientras salta a repetición pasada cuando la condición no es verdadera y, por lo tanto, finaliza el programa.

Recuerde que Forth es de forma libre y los saltos de línea, sangría y mayúsculas utilizados fueron arbitrarios y reflejan mi estilo personal. Podría haber colocado todo el programa en una línea. El único requisito de sintaxis para Forth es que se use un espacio (s) entre tokens.

Si lo desea, puede reescribirse sin locales, manteniendo la misma lógica y flujo de programa, y ​​el código compilado será más pequeño y podría ejecutarse un poco más rápido. No me molestaré en mostrar eso aquí.

Tenga en cuenta que muchos escribirían esta solución utilizando la división de módulo, lo que hace que la solución sea bastante corta y simple. Por supuesto, esto también se puede hacer en Forth.

Si tiene fluidez en Forth, úsela para hacer ejercicio y lea una buena Introducción a los algoritmos

Si no tiene fluidez en Forth, creo que al principio no es un buen idioma para aprender (pero no sé mucho de Forth, y codifiqué solo pequeños programas en él; en el siglo anterior codifiqué cosas importantes en NeWS que también era un lenguaje basado en pila).

Si no conoce la programación, le sugiero leer SICP (y una excelente introducción a la programación, disponible gratuitamente) y practicar con Scheme. Más adelante puede continuar con Introducción a los algoritmos.

Entonces podría aprender algún otro lenguaje de programación, y ese podría ser Forth si realmente lo desea. (Pero no estoy seguro de recomendar Forth; probablemente sea preferible Python, Java o C).

Siento que Forth es realmente un lenguaje de nicho. Por supuesto, a veces es muy adecuado (pero no con frecuencia).

Los lenguajes APL son lo último para la expresión sucinta de algoritmos complejos.

  • Aquí hay un ejemplo del máximo divisor común en la variante APL K :
    mcd
    Máximo común divisor. De la lista de Kidioms de Eugene McDonnel
    {* | 1 + & & / ‘0 = x! /: 1 +! &/ X }

    Esta diferencia entre este y los otros algoritmos es que esto le da al MCD de cualquier conjunto de números, por ejemplo:
    mcd 4 6 12
    2

Forth es el vocabulario mínimo en cualquier lenguaje “chip” particular para construir un diccionario capaz de extenderse.

Ambos generalmente proporcionan un entorno de espacio de trabajo interactivo en el que las expresiones pueden escribirse y probarse lo más rápido que pueda pensar.

Mi 4th.CoSy gratuito y abierto resume toda una vida en APL en un entorno interactivo de computación de notas de listas recursivas dinámicas de listas integradas en un x86 Forth prácticamente orientado.

Con el estilo RPN de codificación en la pila, Forth es una forma bastante extraña de implementar algoritmos. No se traducirá bien al mundo de la programación procesal y funcional, y no estoy seguro de que las habilidades aprendidas de esta manera sean útiles o lo suficientemente significativas como para justificar el esfuerzo. Un lenguaje de programación agradable, pequeño y “convencional” sería la mejor manera de practicar algoritmos. Recomiendo C. Python sería una buena alternativa, aunque su dependencia de la sangría para delimitadores de bloque puede ser contraproducente.

Iría con un lenguaje que sea fácil de leer y fácil de depurar, sin limitarme. Elegiría C # o Java. Python también se considera un buen lenguaje, pero puede ser bastante críptico.