【发布时间】:2013-04-27 11:34:13
【问题描述】:
我最近开始学习 lisp。像许多其他人一样,我正在尝试解决 Project Euler 问题,但是我有点卡在Problem 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。
【问题讨论】:
-
loop显然不支持实现此目的的“直接”方式。 This post oncomp.lang.lisp有一个手卷解决方案。
标签: common-lisp collatz