16.06.2015 Views

ForthLogic inst prog H P.1.2 120113.pdf - F&F

ForthLogic inst prog H P.1.2 120113.pdf - F&F

ForthLogic inst prog H P.1.2 120113.pdf - F&F

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Instrukcja <strong>prog</strong>ramowania w języku <strong>ForthLogic</strong> wersja <strong>P.1.2</strong><br />

słowie TIMER!, a w przypadku kiedy timer nie jest uruchomiony będzie to 0.<br />

Z uwzględnieniem poprzedniego podamy następujący przykład:<br />

> alarm<br />

(OK)<br />

> 1 TIMER? DUP . NAME<br />

1534 alarm (OK)<br />

> end<br />

(OK)<br />

> 1 TIMER? DUP . NAME<br />

0 (OK)<br />

><br />

Ponieważ po wykonaniu słowa alarm, timer 1 uruchamia się ponownie, to w jakiejkolwiek chwili czasu, podczas<br />

wykonania słowa TIMER?, na stos będzie położony adres słowa „alarm” (pokazane znaczenie adresu przytoczono w<br />

przykładzie). Za pomocą słów DUP . NAME zarazem przywołaliśmy na terminal adres i nazwę słowa. Po zatrzymaniu<br />

wykonywania słowa alarm i powtórzeniu procedury na stosie będzie wartość 0, a wiersz z nazwą słowa nie jest<br />

drukowany.<br />

4.7 WYKONANIA WEKTOROWE<br />

Wiemy, że przy definicji nowych słów musimy stosować znane fort‐systemowi słowa. Jednak, istnieje mechanizm, który<br />

pozwala zdefiniować słowo, które w swej definicji zawiera słowo jeszcze nie zdefiniowane. Ten mechanizm ściśle związany<br />

jest z pojęciem wykonania wektorowego i opiera się na słowach EXECUTE i FIND. Słowo EXECUTE (wykonać) zdejmuje ze<br />

stosu górne znaczenie jako wykonawczy adres jakiegokolwiek słowa w słowniku i dane słowo natychmiast wykonywane<br />

jest tak, jakby było bezpośrednio wprowadzone do fortu‐systemu. Uwaga: zalecana duża ostrożność przy pracy z<br />

adresami wykonawczymi ‐ jeśli liczba na szczycie stosu podczas wykonania słowa EXECUTE nie jest takim adresem, to<br />

skutki wykonania słowa EXECUTE będą nieprzewidywalne! Dzięki słowu EXECUTE pojawia się możliwość przekazania<br />

przez stos adresu wykonawczego tego samego typu słów i w ten sposób zrealizować wektorowe, czyli zależne od<br />

kontekstu wykonanie <strong>prog</strong>ramu.<br />

Wykonawczy adres słowa można za pomocą słowa FIND (znaleźć). Słowo FIND sczytuje wiersz z bufora wyjściowego do<br />

pierwszej spacji (słowo, dla którego trzeba znaleźć wykonawczy adres) i jeśli słowo to jest znane forth‐systemowi, na stos<br />

kładzie adres wykonawczy tego słowa.<br />

Przytoczymy przykład aplikacji wspomnianych słów:<br />

> 0 CONSTANT 1beep_adr<br />

(OK)<br />

> : (1beep) 1beep_adr EXECUTE ;<br />

(OK)<br />

> : 2beep 1.0 1000 BEEP 1.0 1 TIMER! (1beep) ;<br />

(OK)<br />

> : 1beep 1.0 2000 BEEP 1.0 1 TIMER! 2beep ;<br />

(OK)<br />

> ." 1beep " FIND TO 1beep_adr<br />

(OK)<br />

> 1beep<br />

(OK)<br />

><br />

Najpierw stworzyliśmy stałą 1beep_adr dla otrzymania wykonawczego adresu (można zastosować zmienną). Następnie<br />

stworzyliśmy słowo‐translator (1beep), które wykonuje adres 1beep_adr. To słowo można wykorzystywać tam, gdzie<br />

planowało się wykorzystać jeszcze niezdefiniowane słowo 1beep w słowie 2beep. I wreszcie, definiujemy słowo 1beep.<br />

Przypisujemy adres wykonawczy słowa 1beep do stałej 1beep_adr, i tym samym tworzymy nieskończoną kolejność<br />

wykonania słów 1beep 2beep 1beep...<br />

‐ 25 ‐

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!