"Mandelbrot and Julia sets generator. Renders in colour with @. For larger pictures, set your screen character size to minimum, and screen size to maximum." 27 ENASCII @escape SET :escape '[2J' , PRINT "First clear the screen"; OPERATOR @clear_screen ASSIGN EXECUTE : "help" ' First set the the pixels (x y) into Pixels, for example: (80 24) @Pixels SET. Next set the function you would like to use, for example: f:z2+c @function SET. The available functions are f:z2+c, f:z3+c, f:z5+c, f:z7+c It is very simple to write a new function. It can have any name you like. Lastly start either the Mandel or the Julia set generators: (use complex numbers for top, left and bottom, right) Mandel. Julia. For example: "100 2i2 -21i-21 21i21 Mandel." To clear the screen and put the text back in black: clear. To just put the text back in black: black. ' PRINT; OPERATOR @help SET 'Mandelbrot / Julia set generator Type: help. for explanation of usage and words defined. ' PRINT : escape '[f', PRINT "Form Feed to top of print page"; OPERATOR @top_of_page SET : (255) render "black characters"; OPERATOR @black SET : clear_screen black; OPERATOR @clear SET MONADIC " render" "The pixels are colour codes" "" ABS FLOOR 256 MODULO DUP SHAPE REVERSE FIRST MONADIC DUP FIRST MONADIC MONADIC "Convert to ANSI terminal colour and print a Monkey" 27 ENASCII '[38;5;' , SWAP DISASSEMBLE REST , 'm@' , ; RESULT " !" TELL 0; EACH DISCARD ' ' PRINT "New Line" REST; REPEAT DISCARD "the rest of the rest of iter"; OPERATOR @render SET DYADIC " make_space" @.Cbr ASSIGN SWAP @.Ctl ASSIGN SUBTRACT DECAPSULATE "calculate the X and Y size" Pixels (1 1) - / ENCAPSULATE "and convert to pixels" .Ctl .Cbr , SWAP , "(top_i_left botom_i_right stepX_i_stepY)" SPACE d0.25p0 *; OPERATOR @make_space SET ARGS 4 FUNCTION " Mandel" " " make_space @C SET "" @BOX SET 0 @ITER ASSIGN @Z SET "Start from 0" "" Mandelbrot REPEAT top_of_page ITER render ; OPERATOR @Mandel SET ARGS 5 FUNCTION " Julia" "" @C SET " " make_space @Z SET "" @BOX SET 0 @ITER SET "" : "1 SLEEP" Mandelbrot_bw ! top_of_page ITER render; REPEAT ; OPERATOR @Julia SET MONADIC "" DUP * C + "The formula: Z 2 ** C +" ; @f:z2+c SET MONADIC "" DUP DUP * * C + "The formula: Z 3 ** C +" ; @f:z3+c SET MONADIC "" DUP DUP DUP DUP * * * * C + "The formula: Z 5 ** C +" ; @f:z5+c SET MONADIC "" Z * Z * Z * Z * Z * Z * C + "The formula: Z 7 ** C +" ; @f:z7+c SET MONADIC "" DUP DUP DUP DUP DUP DUP * * * * * * C + "The formula: Z 7 ** C +" ; @fa:z7+c SET NILADIC " Mandelbrot" Z BOX < @CONTINUE ASSIGN "1 on all positions where Z is inside the BOX?" ITER + @ITER SET "increment ITER on all those positions" Z CONTINUE NOT * Z CONTINUE * function ! + @Z SET ; @Mandelbrot SET NILADIC " Mandelbrot_bw" Z BOX >= ITER + @ITER SET Z function ! @Z SET ; @Mandelbrot_bw SET MONADIC " Mandelbrot.0" "" @.function SET Z BOX < @CONTINUE ASSIGN "1 on all positions where Z is inside the BOX?" ITER + @ITER SET "increment ITER on all those positions" Z CONTINUE NOT * Z .function ! CONTINUE * + @Z SET ; @Mandelbrot_0 SET "Defaults:" (80 24) @Pixels SET f:z2+c @function SET "--" "end of sentence:" .