cr88192 wrote:
> "Marcel Hendrix" <mhx@[EMAIL PROTECTED]
> wrote in message
....
> <snip, big ugly example>
>
> I meant, in general, not that one go and find some ugly monstrosity in
an
> attempt to prove a point (absent citing any comprable example, say, in
> forth).
>
> so, here is the challenge:
> find some forth/postscript/... programs that can perform the same task,
and
> demonstrates comprable or greater readability, with well-written code in
> both languages.
Of course, to have a fair comparison you must stipulate that the reader
has equal familiarity and experience with all the languages in
competition. Since postfix languages are in the minority, it's awfully
easy for someone whose experience is mostly or entirely with the other
kind to say postfix is "unnatural" or "unreadable". It's also entirely
true (as John Passaniti often points out) that languages are designed
for certain intended uses, and will be prettiest in apps within that
sphere.
Forth was originally designed for what we now call embedded systems.
So, I'll submit the following simple embedded-type application (which is
being presented at Forth Day right now, as it happens), to send SOS in
Morse code on an LED.
\ Hardware interface: LED control
\ This version assumes memory-mapped I/O, as on a M52235EVB (Coldfire).
\ I/O registers SETTC, CLRTC, and DDRTC are pre-defined.
\ Glossary:
\ +LED ( -- ) Turn the LED on.
\ -LED ( -- ) Turn the LED off.
\ /LED ( -- ) Perform hardware initialization for LED output
: +LED ( -- ) 1 SETTC C! ;
: -LED ( -- ) $FE CLRTC C! ;
: /LED ( -- ) DDRTC C@[EMAIL PROTECTED]
1 OR DDRTC C! -LED ;
\ Application part I, timing functions:
\ The speed of Morse code transmission is typically specified
\ in words per minute (WPM), and the timing for a dah (dash)
\ is conventionally 3 times as long as a dit (dot). The spacing
\ between dits and dahs within a character is the length of one dit;
\ between letters in a word it is the length of a dah; and between
\ words it is 7 dits.
\ The time for one "dit" can be computed by the formula:
\ Tu = 1200 / WPM
\ Tu holds the current value of one "dit" time. The default value of 120
\ sets the initial rate at 10 WPM.
\ WPM sets Tu based on the formula above.
\ DELAY pauses for n dit times.
\ DIT and DAH control the LED with appropriate timing.
CREATE Tu 120 ,
: WPM ( n -- ) 1200 SWAP / Tu ! ;
: DELAY ( n -- ) Tu @[EMAIL PROTECTED]
* MS ;
: DIT ( -- ) +LED 1 DELAY -LED 1 DELAY ;
: DAH ( -- ) +LED 3 DELAY -LED 1 DELAY ;
\ Application part II, messages:
\ Only the letters S and O are required here. Other letters, numbers,
\ etc., may be added as needed.
: S ( -- ) DIT DIT DIT 2 DELAY ;
: O ( -- ) DAH DAH DAH 2 DELAY ;
: SOS ( -- ) S O S 4 DELAY ;
\ Note that the 4 DELAY at the end of SOS adds to the 2 after
\ the last S and the 1 at the end of the last DIT to give
\ the correct inter-word delay of 7 dit times.
Cheers,
Elizabeth
--
==================================================
Elizabeth D. Rather (US & Canada) 800-55-FORTH
FORTH Inc. +1 310-491-3356
5155 W. Rosecrans Ave. #1018 Fax: +1 310-978-9454
Hawthorne, CA 90250
http://www.forth.com
"Forth-based products and Services for real-time
applications since 1973."
==================================================


|