Journal Journal Portage de TapTempo en Forth

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
13
11
mar.
2018

Salut à tous. Voici un portage de TapTempo en Forth.

5 set-precision
6 Constant steps

: now utime drop ;
: calc-tempo steps 60 1000 1000 * * * s>f   drop now swap - s>f   f/ ;
: print-tempo ." Tempo: " f. ." bpm" cr ;
: restart now steps ;

: main
  ." Appuyer sur la touche entrée en cadence (q pour quitter)." cr
  restart
  begin
    key 113 <> while 1- dup 0 = if calc-tempo print-tempo restart then
  repeat
;

main cr bye

Pour le tester gforth taptempo.fs

PS: il est plus léger que le pachyderme à base de jvm :-)

  • # Force

    Posté par  (site web personnel) . Évalué à 2.

    Wahoo, encore plus compacte !
    Pour moi c'est quasiment aussi cryptique que du BrainFuck quand je lis ce genre de ligne :

    : calc-tempo steps 60 1000 1000 * * * s>f drop now swap - s>f f/ ;

    Après test, le tempo n'est affiché que toutes les 6 frappes, c'est voulu ?

    • [^] # Re: Force

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 11 mars 2018 à 14:23.

      Oui c'est voulu pour permettre de lisser les calculs du tempo sur 6 battements.

      Pour le côté cryptique, c'est pas bien de ma part : je n'ai pas documenté l'usage du tas.

      Mais en gros, au début on a le temps de départ et le compteur sur le tas.
      A chaque itération de la boucle on diminue le compteur.
      Quand il atteint 0, on calcule le tempo :

      steps 60 1000 1000 * * * s>f => on place le numérateur steps*60*1000*1000 sur le tas des flottants.
      drop => on enlève le compteur du tas
      now => on place le temps actuel sur le tas
      swap => on inverse le temps de départ et le temps actuel
      - => on calcule la différence
      s>f => on place le dénominateur sur le tas des flottants
      f/ => on effectue la division

  • # Vieux code

    Posté par  (site web personnel) . Évalué à 2.

    Héhé en relisant ma page perso, je me suis souvenu qu'on peut faire des choses assez terribles en Forth : http://hocwp.free.fr/fex/

    Pour résumer, les balises d'un document sont du Forth et quand ils sont évalués produisent le document.
    C'est l'inverse du Lisp où Code is Data. En Forth Data is Code.

    M'enfin ça ne sert à rien actuellement avec le markdown et consorts. :-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.