The Common Lisp standard does not require implementations to eliminate tail calls, but this is an optimization supported by [many implementations](http://0branch.com/notes/tco-cl.html). It is the case for [Lispworks](http://www.lispworks.com/documentation/lcl50/aug/aug-51.html). You can write your code so that it works portably with multiple implementations, provided you wrap your declarations as required for each one of them (e.g. `#+sbcl`). Otherwise, you have to use an iterative approach, which is not hard to implement in your case. ### Remarks The code looks well-formatted, but consider using meaningful names: - Write `tolerance` instead of `tol` - Write `line-min` (?) or `golden-section-search` instead of `linemin` - `x1`, `x2`, `xi1` and `xi2` are a little hard to read. Granted, what you write is close to mathematical notations where variable names are short and written with indices, but maybe there are more interesting name to give (`low`, `high`?), especially when those names are used as keyword arguments.