( --- Complex arithmetic --- )
( Location of floating point. )
-: precision 10000 ;
+10000 value precision
: sign dup abs / ;
2over 2swap csq c+
;
+100 value maxiter
+
: inSet? ( cr ci -- res )
0 0 ( z_0 = 0 )
true ( flag indicating set membership )
- 100 0 do
+ maxiter 0 do
drop
iterate
-rot 2drop -rot 2drop
;
-: xsteps 100 ;
-: ysteps 30 ;
+100 value xsteps
+30 value ysteps
+
+: mandelDomain
+ -2 0 >scaled -1 0 >scaled 0 5 >scaled 1 0 >scaled
+;
( Draw the Mandelbrot Set!)
-: mandel ( x1 y1 x2 y2 -- )
+: mandelDraw ( x1 y1 x2 y2 -- )
0 pick 3 pick - ysteps /
1 pick 4 pick do
' EXIT , ( append the codeword EXIT )
;
+: ALLOT ( n -- addr )
+ HERE @ SWAP ( here n )
+ HERE +! ( adds n to HERE, after this the old value of HERE is still on the stack )
+;
+
+: VARIABLE
+ 1 CELLS ALLOT ( allocate 1 cell of memory, push the pointer to this memory )
+ WORD CREATE ( make the dictionary entry (the name follows VARIABLE) )
+ DOCOL , ( append DOCOL (the codeword field of this word) )
+ ' LIT , ( append the codeword LIT )
+ , ( append the pointer to the new memory )
+ ' EXIT , ( append the codeword EXIT )
+;
+
+
+: VALUE ( n -- )
+ WORD CREATE ( make the dictionary entry (the name follows VALUE) )
+ DOCOL , ( append DOCOL )
+ ' LIT , ( append the codeword LIT )
+ , ( append the initial value )
+ ' EXIT , ( append the codeword EXIT )
+;
+
+: TO IMMEDIATE ( n -- )
+ WORD ( get the name of the value )
+ FIND ( look it up in the dictionary )
+ >DFA ( get a pointer to the first data field (the 'LIT') )
+ 1+ ( increment to point at the value )
+ STATE @ IF ( compiling? )
+ ' LIT , ( compile LIT )
+ , ( compile the address of the value )
+ ' ! , ( compile ! )
+ ELSE ( immediate mode )
+ ! ( update it straightaway )
+ THEN
+;
+
+( x +TO VAL adds x to VAL )
+: +TO IMMEDIATE
+ WORD ( get the name of the value )
+ FIND ( look it up in the dictionary )
+ >DFA ( get a pointer to the first data field (the 'LIT') )
+ 1+ ( increment to point at the value )
+ STATE @ IF ( compiling? )
+ ' LIT , ( compile LIT )
+ , ( compile the address of the value )
+ ' +! , ( compile +! )
+ ELSE ( immediate mode )
+ +! ( update it straightaway )
+ THEN
+;
+
+
( PRINTING THE DICTIONARY ------------------------------------------------------ )
: ID.