符式三時序

[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> 定義為例 及 以冒號定義為例 來說明 符式三時序