home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l7p070 < prev    next >
Text File  |  1990-07-15  |  4KB  |  99 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║  Lesson 7 Part 070 F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.              ┌──────────────────────────────────────────┐
  6.              │ Summary of the CREATE ... DOES> Process  │
  7.              └──────────────────────────────────────────┘
  8.  
  9. In summary, there are three aspects to consider when using the
  10. CREATE ...  DOES>  construct.
  11.  
  12. 1) The process of creating a new defining word or compiler extension
  13. which will create a new class of objects or data structures.
  14.  
  15. 2) The action of using the new defining word to create some instances of
  16. the new objects or data structures.
  17.  
  18. 3) The execution of one or more of the new objects resulting in actions
  19. characteristic of their class.
  20.  
  21. The word VARIABLE can also be defined using CREATE ... DOES>  but
  22. variables are not too exciting.  The defining words VAR1  and VAR2
  23. function similarly to the definitions of VARIABLE given earlier.
  24.  
  25. : VAR1  ( -- )
  26.   CREATE  2 ALLOT   \ Compile time routine allots space for 16-bit number
  27.   DOES>          ;  \ Run time routine does nothing since CREATE leaves
  28.                     \ the data storage address.
  29. : VAR2 ( -- )
  30.   CREATE  0 ,       \ Compile time routine initializes variable to zero.
  31.   DOES>         ;   \ Run time routine does nothing as above.
  32.  
  33. If you have an 8-bit CPU and are often creating variables and constants
  34. in the range 0 - 255 you may appreciate the following space savers.
  35.  
  36. : BCON  ( n -- )     \ n must be between 0 and 255
  37.   CREATE  C,         \ Compile time routine compile only one byte.
  38.   DOES>   C@      ;  \ Run time ... fetches byte stored at compile time.
  39.  
  40. : BVAR  ( -- )
  41.   CREATE  1 ALLOT      \ Compile time allots only one byte of storage.
  42.   DOES>           ;    \ Run time not required as CREATE leaves pfa.
  43.  
  44. ╓───────────────╖
  45. ║  Problem 7.4  ║
  46. ╙───────────────╜
  47. Implement  VAR1  VAR2  BCON and BVAR and verify that they operate as
  48. advertised.  Provide at least one space saving application of BCON.
  49.  
  50.  
  51.            ┌──────────────────────────────────────────┐
  52.            │ Creating a VECTOR with CREATE ... DOES>  │
  53.            └──────────────────────────────────────────┘
  54.  
  55. CREATE ... DOES>  is really the most exciting aspect of Forth.  Also at
  56. least initially the most difficult to understand.  You see...  this
  57. construct can be used to create language.  Most other languages do not
  58. allow the user to create new defining words or compiler extensions.
  59.  
  60. Let's look at one more traditional extension.  We are going to create a
  61. data type called VECTOR.  We will use VECTOR to create FORCE and
  62. DISTANCE and then compute some WORK using the old Physics definition
  63. WORK = FORCE dot DISTANCE. Here is the defining word VECTOR: This is
  64. step 1  create it.
  65.  
  66. : VECTOR  ( n  -- )     \  n is the maximum subscript value.
  67.   CREATE  2 * ALLOT     \  Compile time allot space for n 16-bit numbers.
  68.   DOES> SWAP -1 2 * + ; \  Run time, compute storage address of element.
  69.  
  70. This is step 2  make some instances of VECTORS.
  71.  
  72. 3 VECTOR DISTANCE
  73. 3 VECTOR FORCE
  74.  
  75. This is step 3  use the instances to something useful:
  76. Assign some values to our vectors...
  77.  
  78. 4 1 DISTANCE !     6 2 DISTANCE !      5 3 DISTANCE !
  79. 1 1 FORCE !        2 2 FORCE !         3 3 FORCE !
  80.  
  81. The vector DISTANCE = [ 4, 6, 5 ]  and FORCE = [ 1, 2, 3 ]
  82. Now here is the definition that will calculate the work.
  83.  
  84. : WORK  ( -- )
  85.   0  4 1 DO  I DISTANCE @
  86.              I FORCE    @
  87.              * +
  88.          LOOP
  89.          ." The work is " . ;
  90.  
  91. Executing WORK would give:
  92.   WORK <enter>  The work is 31  ok
  93.  
  94. ┌───────────────────────────────────┐
  95. │  Please Move to Lesson 7 Part 080 │
  96. └───────────────────────────────────┘
  97.  
  98.  
  99.