compudanzas

forth

stack-based and lightweight programming language.

it uses the postfix notation.

reading

books

this book has a great pace and nice illustrations

starting forth book

tutorials

pForth - portable Forth in 'C'

Simple Forth

articles

Introduction to Thoughtful Programming and the Forth Philosophy By Michael Misamore

trying out

forth editor lifted from easy forth - by eli_oat

some words

running

these are some words for doing arithmetic with paces (min/km) and velocities (km/hr) relevant to running.

( running.forth )
: minseg>seg swap 60 * + ; ( min segs -- segs )
: seg>minseg 60 /mod swap ; ( segs -- min segs )
: horminseg>seg minseg>seg swap 3600 * + ; ( hr min segs -- segs )
: minseg/m>seg/1km >r minseg>seg 1000 swap r> */ ; ( min segs metros -- segs1km )
: seg/1km>vel 3600 swap / ; ( segs1km -- vel )
: paso>vel minseg>seg seg/1km>vel ; ( min segs -- vel )
: vel>seg/1km 3600 swap /  ; ( vel -- segs1km )
: minseg- minseg>seg >r minseg>seg r> - seg>minseg ; ( min segs min segs -- min seg )

( print )
: .min 0 <# [CHAR] ' HOLD #S #> TYPE ; ( min -- )
: .segpad 0 <# [CHAR] " HOLD # # #> TYPE ; ( segs -- )
: .seg 0 <# [CHAR] " HOLD #S  #> TYPE ; ( segs -- )
: .minseg 60 /mod dup 0> IF .min .segpad ELSE drop .seg THEN ; ( segs -- )
: .vel . ." km/hr " ;
: lista-velocidades cr 21 10 do i dup .vel vel>s1k .ms cr loop ;

usage

in order to load them, you'd do:

include running.forth

for example, to convert a velocity to a pace, and print it:

18 vel>seg/1k .minseg

output:
3'20" ok

to do the opposite operation:

3 20 paso>vel .vel

output:
18 km/hr ok

to get the pace of a given segment, using minutes, seconds and distance in meters:

( 1'03" in 300m )
1 03 300 minseg/m>seg/1k .minseg

output:
3'30" ok

to get the difference between two times in minutes, seconds:

( 3'20" - 3'15" )
3 20 3 15 minseg- minseg>seg .minseg

output:
5" ok

incoming links