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

时间:2015-10-09 18:44:58

标签: lisp common-lisp clisp

所以我有这个小函数返回一组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))

2 个答案:

答案 0 :(得分:9)

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

Value="#{valueNameInOctopus}"

答案 1 :(得分:4)

如果您已经使用loop,那么此处不需要任何其他内容,请阅读loop它真的非常强大

(defun minimum-of-3 (list-1 list-2 list-3)
  (loop :for x :in list-1
        :and y :in list-2
        :and z :in list-3
        :collect (min x y z)))

CL-USER> (minimum-of-3 '(1 2 3) '(4 5 6) '(7 8 -1))
(1 2 -1)
CL-USER> (minimum-of-3 '(1 2 3) '(4 -5 6) '(7 8 -1))
(1 -5 -1)
CL-USER> (minimum-of-3 '(1 2 3) '(4 -5 6) '(7 8))
(1 -5)
相关问题