如何从列表列表中检索每个"列"中的最小值列表?

Flo*_*ofk 1 lisp clisp common-lisp

所以我有这个小函数在一组3个列表中返回最小值,有没有办法可以把它写得更好看?它对我来说似乎不太好看,但是我可能不知道这意味着什么(我是一个lisp noob)任何提示都会非常感激.

;;;;minimum of 3

(defun minimum-of-3 (list1 list2 list3);returns the minimum value when comparing 3 lists
    (setq minimum-list '())
    (setq mini '())
    (loop for x in list1
            for y in list2
            for z in list3
            do
            (push x mini)
            (push y mini)
            (push z mini)
            (push (apply 'min mini) minimum-list)
            (setq mini '()))

    (reverse minimum-list))
Run Code Online (Sandbox Code Playgroud)

Jos*_*lor 9

coredump的答案很好,如果你真的想使用循环,但没有必要在这里. mapcar可以获取多个列表参数,而min可以获取一个或多个参数,因此您只需映射 最小值列表.

(let ((xs '(8 4 1))
      (ys '(3 9 2))
      (zs '(9 2 4)))
  (mapcar 'min xs ys zs))
;=> (3 2 1)
Run Code Online (Sandbox Code Playgroud)