( : ; immediate create does> allot , variable constant array if else then while repeat do loop dup swap pick drop + - * = < > & | ^ ! @ . putpixel redraw 123 i "string" 'c' `javascript` ) : over 1 pick ; : / `sp-=2;stack[sp-2]/=stack[sp];` ; : sin `stack[sp-2]=Math.sin(stack[sp-2]);` ; : cos `stack[sp-2]=Math.cos(stack[sp-2]);` ; 8 constant n create x 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , n array y variable t : _fft ; ( recurse workaround ) : _fft ( x y step -- ) dup n < if over 3 pick 2 pick 2 * _fft ( y x step*2 _fft ) over over + over 4 pick + 2 pick 2 * _fft ( y+step x+step step*2 _fft ) n do 1 + over 2 * - dup n / 3.1415926535897932384626433832795 * dup cos swap sin i * - over 3 pick + 4 pick + @ * t ! ( e^ix=cosx+isinx ) dup 3 pick + @ t @ + over 2 / 5 pick + ! dup 3 pick + @ t @ - over n + 2 / 5 pick + ! loop then drop drop drop ; : fft n do dup x + @ over y + ! loop x y 1 _fft ; : print n do n over - 1 - x + @ . "
" . loop ; fft print