Ver Mensaje Individual
  #14  
Antiguo 13-02-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Reputación: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Un lenguaje que inventé hace un tiempo y que, por fin, le he encontrado una aplicación (si aceptan un presupuesto que he hecho, claro ):

Código:
  0
  @
    1 +
    DUP 3 %
    0 = IF
      "fizz" CALL:WRITE
    FI
    DUP 5 %
    0 = IF
      "buzz" CALL:WRITE
    FI
    DUP DUP 3 % SWAP 5 %
    0 = SWAP 0 = & IF
      DUP CALL:WRITE
    FI
    "" CALL:WRITELN
    DUP 100 < IF
      RET
    FI
"Ahora vas y lo cascas"

Explicación:

Este lenguaje es, en realidad, el "Ensamblador" de una máquina virtual basada en pilas, al estilo FORTH. DUP duplica el elemento en la cima de la pila, mientras que SWAP intercambia los dos valores de la cima. Los operadores extraen uno o dos elementos de la pila, lo operan y lo devuelven a la pila; y son los normales (+, -, >, <...) siendo "%" el cálculo del resto en una división entera. "CALL" llama a una rutina (WRITE y WRITELN en este caso). @ apila en la pila de código (separada de la pila de datos, como en FORTH) la dirección de dicha arroba, mientras que RET desapila la cima de la pila de código en el registro de ejecución.

Vamos, muy sencillo.

El código puede optimizarse duplicando e intercambiando los resultados de las operaciones (que en principio es más rápido que calcular el módulo y hacer comparaciones), pero entonces ya te lías...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 13-02-2012 a las 11:16:20.
Responder Con Cita