如何使用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 (...))
)
)
我不太明白如何使用地图功能,所以任何帮助/提示都会很棒。谢谢!
答案 0 :(得分:1)
如果我理解你想要什么,这很容易:
(defun nested-gcd (list)
(reduce #'gcd list :key (lambda (elt)
(if (consp elt)
(nested-gcd elt)
elt))))
答案 1 :(得分:0)
我不知道非线性列表是什么,但您可以使用gcd
来获得最大公约数,这是标准的一部分。如果你的意思是某种树,你可能必须先将它弄平。