PiF 2

  <terug>
Quizvraag

Op de eerste PiF-bijeenkomst kwam als eerste deze versie van KEUS op het bord te staan:

: KEUS1 ( n ch -- nr )
  BEGIN KEY
        DUP 2OVER
            TUCK +      ( ch ch+n )
        WITHIN
  UNTIL
  - NEGATE
  NIP ;
Deze definitie klopt niet, want als je een ongeldig commando intypt, gaat er iets mis met de stack.

Dat is toen opgelost door

  UNTIL
te vervangen door
        0=
  WHILE DROP
  REPEAT
Verder hebben we
  TUCK +
uit de lus gehaald. Die berekening kun je beter van te voren doen in plaats van bij iedere lusdoorgang opnieuw.

Alternatief

Je kunt de stackfout in KEUS1 ook opheffen door slechts twee simpele Forthwoordjes in te lassen, zonder andere dingen aan de code te veranderen, UNTIL blijft dus staan. Nu is ''twee simpele Forthwoordjes'' wat vaag; laat ik het daarom concreet stellen:

Quizvraag

: KEUS1 ( n ch -- nr )
  TUCK +                  \ ch  ch+n
  BEGIN KEY
        DUP 2OVER WITHIN
  UNTIL
  NIP
  - NEGATE ;
Zie je kans om de stackfout in deze definitie op te heffen door twee woordjes uit de lijst
  AND  DROP  DUP  ?DUP  OR  OVER  XOR
ergens in deze definitie van KEUS1 te plakken?
(Hier zijn twee oplossingen)

Als je uiterlijk zaterdag 12 mei 2007 een oplossing instuurt, stuur ik je mijn oplossingen. Voor de eerste goede oplossing een weekend Madrid op kosten van de Forth-gg, tja... aan mij ligt het niet, maar dat viel niet goed bij de penningmeester. Misschien is zoiets ook niet nodig?

 
Groeten,
A.N.
  <terug>