(in-package :cl-user) (defun substitute-in-polynomial (plug-value &rest coefficients) (let ((sum-collector 0)) (let ((iterator (- (length coefficients) 1))) (dolist (coefficient coefficients) (+ sum-collector (* coefficient (expt plug-value iterator))) (decf iterator))) sum-collector)) (defun polynomial-interface (&key order tolerance start end &rest coefficients) (if (not (equalp (length coefficients) (+ order 1))) (format nil "Invalid number of arguments")) (do ((test-expression (< (* (substitute-in-polynomial left coefficients) (substitute-in-polynomial right coefficients)) 0)) (left start (if test-expression mid left)) (right end (if test-expression right mid))) (<= (abs (- right left)) tolerance) (format nil "The root is in between ~a and ~a" left right)))