比较 common lisp 中两种解决方案的效率或正确性或有效性

Compare the efficiency or correctness or validity two solutions in common lisp

在解决 here 中的以下问题时,我得到的答案与作为示例解决方案给出的答案不同。由于我是 Lisp 的新手,我不知道哪种方法更好。请分享您的想法。

问题:最小

写一个迭代函数 returns 列表中最小的数字:

(smallest '(4 2 5 8 1 6))

1

示例解决方案:

(defun smallest (lst)
  (let ((smallest (first lst)))
    (dolist (ele (rest lst))
      (if (< ele smallest)
          (setf smallest ele)))
    smallest))`

我的解决方案:

(defun smallest (lst)
  (let ((sm (car lst)))
    (loop for i in lst when (> sm i) do (setf sm i))
    sm))

另外,firstcar 有什么区别?

更好:

CL-USER 1 > (loop for i in '(4 2 5 8 1 6) minimize i)
1