Plaster

common-lisp
;; Don't use these. (defun trim-list (list start &optional end) "Trim your list from ‘start’ to ‘end’ and return it. This modifies the ‘list’." (let (result) (setf result (nthcdr start list)) (when end (rplacd (nthcdr (1- (- end start)) result) nil)) result)) (defmacro trim-listf (list start &optional end) "Trim your list from ‘start’ to ‘end’ and return it. This modifies the ‘list’." (let ((t-list (gensym "LIST")) (t-start (gensym "START")) (t-end (gensym "END"))) `(let ((,t-list ,list) (,t-start ,start) (,t-end ,end)) (setf ,t-list (nthcdr ,t-start ,t-list)) (when ,t-end (rplacd (nthcdr (1- (- ,t-end ,t-start)) ,t-list) nil)) ,t-list)))