PiF 10 | <terug> |
[char] \ over = if ... exit thenWelke code komt er op de plaats van de stippeltjes? Een antwoord is:
[char] \ over = if hleeg? ?exit h@ to hier exit thenHet 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@ ;
bl over = if hier WIS exit thenEen 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
: .SUDOKU ( -- ) ... ; \ Exporteer de sudokuDit 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 hiermaar 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 .sdkWe 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 .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?
Maak een definitie voor
: .SDK ( hier -- ) ... ;
Groeten,
| <terug> |