我最近开始学习 lisp。像许多其他人一样,我正在尝试解决 Project Euler 问题,但是我有点卡在问题 14:最长的 Collatz 序列上。
这是我到目前为止所拥有的:
(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。