我最近開始學習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