PiF 10

  <terug>
- Antwoorden op de opgaven van PiF 8
- Antwoord op de opgave van PiF 9


De opgaven van PiF 8


8a) Back slash commando:
zet de cursor op het laatst ingevulde vakje.

 [char] \ over = if  ... exit then
Welke code komt er op de plaats van de stippeltjes? Een antwoord is:
 [char] \ over = if hleeg? ?exit h@ to hier exit then
Het woordje H@ dat de top van de historie-stack uitleest bestaat nog niet. Die definitie moeten we dus nog even toevoegen bij die van >H en H>.
 : h@ ( -- x )   hp c@ ;


8b) Spatie commando:
wis het cursorvakje als dat het laatst ingevulde vakje is.

 bl over = if hier WIS exit then
Een oplossing:
 : wis ( hier -- )
   h@ <> hleeg? or ?exit
   z h> noteer ;
Voor de uniformiteit vervangen we ook in SCHOON de 255 door 'z'.
 : schoon ( -- ) (sdk zz z fill h-ini ;   \ Wis de hele sudoku


De opgave van PiF 9


Maak een woord .SUDOKU dat de actuele inhoud van de sudoku afdrukt in een vorm die door het woord SUDOKU weer ingelezen kan worden.

 : .SUDOKU ( -- ) ... ; \ Exporteer de sudoku
Dit lijkt een eenvoudige oplossing:
 : .sudoku ( -- )
   naam count type
   .sdk ;
Jammer genoeg hebben we er nu last van dat de cursor afgedrukt wordt. Dat is te omzeilen met
    hier
          -1 to hier .sdk
    to hier
maar dat is dan ook echt omzeilen. Niet erg elegant. Hadden we achteraf gezien .SDK misschien beter zo kunnen ontwerpen dat het HIER van te voren op stack verwacht?
 : .sdk ( hier -- ) ... ;
Een afdruk zonder cursor zou je dan krijgen met
  -1 .sdk
We gaan hier op door in PiF 11.

Een ander punt is, dat het resultaat van .SDK veel ruimte inneemt. Voor het bewaren van een gedeeltelijk ingevulde sudoku is een compacte vorm handiger. Daarom zien we af van het gebruik vam .SDK

: .sudoku (  -- ) \ Exporteren
  naam count type
  (sdk
  z 0 do cr
  z 0 do count >symbool emit
  loop loop drop ;

Voorbeeld:

 .sudoku [rtn] Demo-1
 :::5::::6
 :4::6932:
 :9:2::4:1
 2::::::::
 :78::::63
 ::3::8:::
 5:::8:::7
 :::4:::1:
 ::69732:: ok

In sudo4.f, vind je de code tot nu toe.


Opgave 10a

In .SUDOKU zou je na de regel
  naam count type
deze code in kunnen lassen:
  0 (sdk zz over + swap do i c@ z < - loop [char] . emit .
Wat is het effect daarvan?


Opgave 10b

Maak een definitie voor
: .SDK ( hier -- ) ... ;


 
Groeten,
A.N.
  <terug>