Loops 循环:FOR子句应出现在循环';主体

Loops 循环:FOR子句应出现在循环';主体,loops,lisp,common-lisp,Loops,Lisp,Common Lisp,我有这个代码,但是我在运行它时得到了这个错误的答案,有人知道如何修复它或者为什么我会得到这个错误吗 (defun pell (n) (setq n (+ n 1)) (loop repeat n for current = 0 then next and next = 1 then (+ (* 2 next) current) collect current)) (print (pell 6)) 您需要使用for更改和,并将repeat

我有这个代码,但是我在运行它时得到了这个错误的答案,有人知道如何修复它或者为什么我会得到这个错误吗

(defun pell (n)
  (setq n (+ n 1))
  (loop repeat n
        for current = 0 then next
        and next = 1 then (+ (* 2 next) current)
        collect current))

(print (pell 6))

您需要使用
for
更改
,并将
repeat
子句移动到变量子句之后。对于
关键字,每个迭代变量必须由自己的
引入。以下是正确的版本:

(defun pell (n)
  (loop for current = 0 then next
        for next = 1 then (+ (* 2 next) current)
        repeat (1+ n)
        collect current))

(pell 6)  ; => (0 1 3 9 27 81 243)
注意:SBCL毫无问题地接受了我以前版本的
for
之前的
repeat
,但官方语法要求在
for
子句之后重复

在中,您可以找到
循环
原语的正确语法


可以找到
循环
构造的介绍。

您需要使用
更改
for
,并将
repeat
子句移动到变量子句之后。对于
关键字,每个迭代变量必须由自己的
引入。以下是正确的版本:

(defun pell (n)
  (loop for current = 0 then next
        for next = 1 then (+ (* 2 next) current)
        repeat (1+ n)
        collect current))

(pell 6)  ; => (0 1 3 9 27 81 243)
注意:SBCL毫无问题地接受了我以前版本的
for
之前的
repeat
,但官方语法要求在
for
子句之后重复

在中,您可以找到
循环
原语的正确语法

可以找到
循环
构造的介绍

FOR子句应该出现在循环的主体之前

在FOR之前有一个REPEAT子句。Lisp抱怨FOR应该出现在主体之前

因此而不是

REPEAT ...
FOR ...
...
是的

FOR子句应该出现在循环的主体之前

在FOR之前有一个REPEAT子句。Lisp抱怨FOR应该出现在主体之前

因此而不是

REPEAT ...
FOR ...
...
是的



您需要为
更改
。每个迭代变量必须由它自己的
for
子句引入。我仍然收到一个错误,您需要用
for
更改
。每个迭代变量必须由它自己的
for
子句引入。我仍然得到一个错误正确的列表是(01 2 5 12 29 70)不是(01 3 9 27 81 243),我用这个代码得到了两次错误我只更正了语法错误。如果算法有错误,你可以发布另一个问题,在那里你可以准确地显示你想要的。我仍然收到警告:循环:FOR子句应该出现在循环的主体之前,带有你发布的更正代码。repeat需要在FOR forms之后。谢谢,@RainerJoswig,我在SBCL中测试了第一个版本,该实现不会导致任何错误或警告。我现在已经更正了答案。正确的列表是(01252970)而不是(01392781243),并且我用这个代码得到了两次错误。我只更正了语法错误。如果算法有错误,你可以发布另一个问题,在那里你可以准确地显示你想要的。我仍然收到警告:循环:FOR子句应该出现在循环的主体之前,带有你发布的更正代码。repeat需要在FOR forms之后。谢谢,@RainerJoswig,我在SBCL中测试了第一个版本,该实现不会导致任何错误或警告。我现在已经更正了答案。我得到了以下错误警告:循环:重复之后,N被解释为类型规范***-LOOP:invalid关键字NIL After for我不知道您尝试执行的代码是什么。每个错误描述都应该有一个可复制的示例。for before repeat给出了错误警告:LOOP:After repeat,N被解释为类型规范***-LOOP:invalid关键字NIL After FORI写道您应该将repeat子句移动到for子句之后。在整个条款之后。不只是移动,而是在单词后重复。FOR子句描述了完整的FOR迭代。完整的重复从句毕竟需要完整的从句。非常感谢你,你认为我的计算有问题吗?因为当你说我得到不同的答案时,我得到了这个错误警告:循环:重复之后,N被解释为一个类型规范***-LOOP:fore之后的无效关键字NIL我不知道您试图执行的代码是什么。每个错误描述都应该有一个可复制的示例。for before repeat给出了错误警告:LOOP:After repeat,N被解释为类型规范***-LOOP:invalid关键字NIL After FORI写道您应该将repeat子句移动到for子句之后。在整个条款之后。不只是移动,而是在单词后重复。FOR子句描述了完整的FOR迭代。完整的重复从句毕竟需要完整的从句。非常感谢你,你认为我的计算有问题吗?因为当我按照你说的做的时候,我得到了不同的答案