############################## librep ĒŠ ############################## #!/usr/bin/rep !# (defun deriv (f) (let ( (dx 1e-12) ) (lambda (x) (/ (- (f (+ x dx)) (f (- x dx))) (* 2 dx) )) ) ) (defun newton (f guess) (let ( (adjust (/ (f guess) ((deriv f) guess))) ) (if (< (abs (/ adjust guess)) 1e-12) guess (newton f (- guess adjust)) ) ) ) (format standard-output "cubic root of 2 is: %d\n" (newton (lambda (x) (- (* x x x) 2)) 1.0) ) ############################## perl ĒŠ ############################## #!/usr/bin/perl -w sub deriv { my ($f) = @_; my ($dx) = 1e-6; return sub { my($x)=@_; (&$f($x+$dx)-&$f($x-$dx))/2/$dx; } } sub newton { my ($f, $guess) = @_; my ($df, $adjust) = deriv($f); do { $adjust = &$f($guess) / &$df($guess); $guess -= $adjust; } while (abs($adjust/$guess) > 1e-6); return $guess; } printf("cubic root of 2 is: %f\n", newton(sub { my ($x)=@_; return $x*$x*$x-2; }, 1) );