非线性列表 Lisp 的 GCD
GCD of a non linear list Lisp
如何使用 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 (...))
)
)
我不太了解如何使用映射函数,所以任何 help/hints 都很好。谢谢!
我不知道什么是非线性列表,但您可以使用 gcd
获得最大公约数,这是标准的一部分。如果你指的是某种树,你可能必须先把它弄平。
如果我理解正确,那很简单:
(defun nested-gcd (list)
(reduce #'gcd list :key (lambda (elt)
(if (consp elt)
(nested-gcd elt)
elt))))
如何使用 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 (...))
)
)
我不太了解如何使用映射函数,所以任何 help/hints 都很好。谢谢!
我不知道什么是非线性列表,但您可以使用 gcd
获得最大公约数,这是标准的一部分。如果你指的是某种树,你可能必须先把它弄平。
如果我理解正确,那很简单:
(defun nested-gcd (list)
(reduce #'gcd list :key (lambda (elt)
(if (consp elt)
(nested-gcd elt)
elt))))