符式三時序
[file] D:\test_if.f
((
Forth has three tenses
1st Definition-time ( 定義時態 )
2nd Compile-time ( 編譯時態 )
3th Run-time ( 執行時態 )
))
: cyn
0x55aa55aa here
4 allot
!
;
: cyn1
0x55aa55aa here
\ 4 allot
!
;
: cyn.THEN ( addr f -- )
\ 1st 定義時態 definition-time
[ cyn ]
STATE @
if
\ 2nd 編譯時態 Compile-time
else
\ 3th 執行時態 Run-time
then
; IMMEDIATE
: cyn1.THEN ( addr f -- )
[ cyn1 ]
; IMMEDIATE
[eof]
FLOAD 'D:\test_if.f'
hex
' cyn.THEN 20 dump
cr
' cyn1.THEN 20 dump
FLOAD 'D:\test_if.f'
44939C | 00 10 40 00 AA 55 AA 55 84 10 40 00 00 10 40 00 |..@.枓枓?@...@.|
4493AC | 84 10 40 00 00 00 00 00 00 00 00 00 00 00 00 00 |?@.............|
4493A8 | 00 10 40 00 84 10 40 00 00 00 00 00 00 00 00 00 |..@.?@.........|
4493B8 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
: _] ( -- )
STATE ON ;
: _[ ( -- ) \ turn off compiling
STATE OFF ;
DEFER ] ' _] IS ]
DEFER [ IMMEDIATE ' _[ IS [ \ turn off compiling
符式裡有兩個詞 "[" 及 " ]" 來控制冒號定義中的編碼態之開關
以切換 STATE ON 編碼態(第二時序 ) 及 STATE OFF
執行態時(第三時序)
: slow 1024 64 / ;
: quicker [ 1024 64 / ] Literal ;
IS...Defer
第一時序為定義態 STATE ON 編碼態(第二時序 ) 及 STATE OFF
執行態時(第三時序)
分別以 以CREATE...DOES> 定義為例 及 以冒號定義為例 來說明 符式三時序