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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 2 Part 050  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5. We are going to put you to work right away this time.
  6.  
  7. ╓──────────────╖
  8. ║ Problem 2.6  ║
  9. ╙──────────────╜
  10. Use HELP , VIEW , Starting Forth etc to produce a table of stack
  11. comments and descriptions for the following words and upload your
  12. solution to the BBS as a reference for others reading the tutorial.
  13. First one to upload the complete list wins!  We only want one copy
  14. posted.  Here is the word list:
  15.  
  16. DROP SWAP DUP OVER ROT -ROT 2DROP 2SWAP 2DUP 2OVER
  17.  
  18. Example:
  19. OVER ( a b -- a b a )   Make a copy of the second item to top of stack.
  20.  
  21.            ┌─────────────────────────────┐
  22.            │  Our First Useful Program.  │
  23.            └─────────────────────────────┘
  24.  
  25. Make a Forth word to compute the volume of a rectangular processing
  26. tank that has length l , width w, and height h ( all measured in feet ).
  27. Call the word TANK_VOLUME .  The word should be used as follows:
  28.  
  29. <l> <w> <h> TANK_VOLUME <enter>
  30.  
  31. We could give the stack picture instead:
  32.  
  33. TANK_VOLUME ( l w h -- )
  34.  
  35. Here is a sample of the output to be produced by TANK_VOLUME.
  36.  
  37. 4 3 2 TANK_VOLUME <enter>
  38. Length 4 feet
  39. Width  3 feet
  40. Height 2 feet
  41. Volume 24 cubic feet. ok
  42.  
  43. Our first approach will be to write just one word to do everything
  44. shown above.  By the way... Forth programmers commonly create programs,
  45. tools, and even large applications that are used from within a Forth
  46. system operation environment so passing the input to the program
  47. TANK_VOLUME as a set of parameters on the stack is very common.
  48.  
  49. The first thing our program/word must accomplish is to echo or display
  50. the input stack parameters on the screen.  Note that the first value
  51. displayed is the length which is the third item on the stack.  This can
  52. be accomplished by the sequence:
  53.  
  54. CR ROT DUP ." Length"  . ." feet"  ( l w h -- w l h )  <-- stack!
  55.  
  56. Here is the code for the word TANK_VOLUME. Enter it into a file
  57. called TANKVOL.SEQ
  58.  
  59. \ First Approach: Write one word to do the whole thing!
  60. : TANK_VOLUME   ( l w h   -- )
  61.         CR ROT DUP  ." Length " .  ." feet"
  62.         CR ROT DUP  ." Width  " .  ." feet"
  63.         CR ROT DUP  ." Height " .  ." feet"
  64.         CR *   *    ." Volume " .  ." cubic feet." ;
  65.  
  66. ╓─────────────╖
  67. ║ Problem 2.7 ║
  68. ╙─────────────╜
  69. a) Add stack comments to each line of the above definition.
  70. b) Test the word with some typical values. What is the largest cubical
  71.    tank ( l=w=h ) that can have its volume computed accurately?
  72.    (Remember we are using signed integers).  If you changed the
  73.    dot " . " to " U. " what is the largest cubical tank that would
  74.    have its volume computed accurately?
  75. c) Decompile TANK_VOLUME.  Debug TANK_VOLUME.
  76. d) Please please do this.  Leave out the last " mark just before the
  77.    semi colon and recompile the word.  Report back to me what happened!
  78.    We predict something weird will happen.  Can you discover how to
  79.    recover without resetting you machine?  Hint: With the " missing
  80.    semi-colon is gobbled up by ." looking for the terminating " which
  81.    does not exist.
  82.  
  83. IMPORTANT:  At various points we have deliberately been showing you how
  84. you could crash your Forth system.  We have heard many stories from the
  85. people new to Forth complaining about all the crashes and having to
  86. reset the machine.  If you are aware of some of the things that can go
  87. wrong it is often possible to recover gracefully without resetting your
  88. machine.
  89.  
  90.        ┌─────────────────────────────────────────────────┐
  91.        │  Factoring. ( Almost like algebraic factoring ) │
  92.        └─────────────────────────────────────────────────┘
  93.  
  94. You may have noticed a lot of repetition in the above definition of
  95. TANK_VOLUME.  Every line has  CR  ROT  DUP  .  and ." feet"
  96. Here is a new version called TANK-VOLUME that  "factors" out the
  97. repetitions into two new words... .ECHO and .FT.
  98. \ Add this to your file TANKVOL.SEQ. Verify that TANK-VOL functions.
  99.  
  100. \ Second Approach: Volume of a tank factored.
  101. : .ECHO   ( a b c -- b c a )
  102.         ROT DUP . ;
  103.  
  104. : .FT   ( -- )
  105.         ."  feet." CR ;
  106.  
  107. : TANK-VOLUME   ( l w h   -- )
  108.         CR  ." Length " .ECHO .FT
  109.             ." Width  " .ECHO .FT
  110.             ." Height " .ECHO .FT
  111.    *   *    ." Volume " .  ." cubic" .FT   ;
  112.  
  113. ┌────────────────────────────────────┐
  114. │  Please move to Lesson 2 Part 060  │
  115. └────────────────────────────────────┘
  116.