GCD的非线性列表Lisp

时间:2015-01-11 13:54:29

标签: list common-lisp greatest-common-divisor

如何使用Common Lisp中的Map函数获取非线性列表的GCD?

defun gcd (a b)
    (cond
      ((eq b 0) a)
      (t (gcd b (mod a b)))))

(defun gcdall (l)
    (cond
        ((null l) nil)
        (t (...))
)
)

我不太明白如何使用地图功能,所以任何帮助/提示都会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

如果我理解你想要什么,这很容易:

(defun nested-gcd (list)
  (reduce #'gcd list :key (lambda (elt)
                            (if (consp elt)
                                (nested-gcd elt)
                              elt))))

答案 1 :(得分:0)

我不知道非线性列表是什么,但您可以使用gcd来获得最大公约数,这是标准的一部分。如果你的意思是某种树,你可能必须先将它弄平。