我最近开始学习lisp。像其他许多人一样,我正在努力解决欧拉计划问题,但是我有点卡在Problem 14:最长的Collatz序列。将列表理解转换为Common Lisp循环
这是我到目前为止有:
(defun collatz (x)
(if (evenp x)
(/ x 2)
(+ (* x 3) 1)))
(defun collatz-sequence (x)
(let ((count 1))
(loop
(setq x (collatz x))
(incf count)
(when (= x 1)
(return count)))))
(defun result()
(loop for i from 1 to 1000000 maximize (collatz-sequence i)))
这将正确打印最长序列(525),但不能产生最长序列数。
我要的是如果可能的话
result = maximum [ (collatz-sequence n, n) | n <- [1..999999]]
翻译成Common Lisp的。
'loop'显然不支持“直接”的方式来实现这一目标。 [这篇文章在'comp.lang.lisp'](https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.lisp/LVEKhM6cheg)中有一个手动解决方案。 – 2013-04-27 11:54:47