(define (time-to-move from-pos to-pos)
;; Calculates the total time to move between two positions,
;; assuming rotation and ascension can occur simultaneously.
(max (time-to-rotate (position-azimuth from-pos)
(position-azimuth to-pos))
(time-to-ascend (position-elevation from-pos)
(position-elevation to-pos))))
Yet the author injects needless complexity with macros and claims "I think it’s possible to write clearer Lisp code, I just don’t know how." I don't get it.
In projects? Yes, scaling them back is a good idea. They're a specific tool with a specific use. It's profoundly annoying, especially in Nim world, to pull in a library that then hides all of its functionality in code paths that are only generated at compile time. Things become very difficult to debug.
indeed. Note that's a function declaration in Common Lisp (yours is Scheme):
(defun time-to-move (from-pos to-pos)
it's like the author didn't understand accessors? They don't need the with-accessors. They also might not need with-slots, had they had an accessor for last-duration.
LET* may be needed if the operations are time-dependent (so if the move-to operation must happen before the delay operation), as LET does the binding in parallel (at least, according to the spec).