用于在循环中定义变量的 Lisp 循环中的语法错误
Syntax Error in Lisp Loop for defining variables in a loop
我是初学者,正在学习Lisp。我想使用循环语句将循环转到使用k的i值,但是出现以下错误。我觉得我括号写对了,但是我不知道为什么会出现这个错误。
LOOP: illegal syntax near (SETQ K (1+ K)) in
(LOOP WHILE (< K I) (SETQ K (1+ K)))
下面是我的代码。
(DEFUN promising (i)
(setq k 1)
(loop while (< k i) (setq k (1+ k)))
(return-from promising 1)
)
promising(2)
我看到几个小东西:
loop
语法不是 100% 正确,您漏掉了一个 do
关键字
(loop while (< k i) do (setq k (1+ k)))
^^
do keyword is missing!
- 函数调用的语法
promising(2)
也不正确
(promising 2)
return-from
事情不寻常
第一个原因是 return 值始终是 1
,在您的情况下,您可能希望 return k
.
(DEFUN promising (i)
(setq k 1)
(loop while (< k i) (setq k (1+ k)))
(return-from promising 1))
^
Always return 1
第二个原因是您不需要 return-from
,defun
形式的最后一个值将提供给函数调用者。
(DEFUN promising (i)
(setq k 1)
(loop while (< k i) do (setq k (1+ k)))
k)
^
The last value will be returned to the function caller
k
变量应在本地 定义,而不是使用全局 定义
最终代码可能是这样的:
(defun promising (i)
(let ((k 1))
(loop while (< k i) do (setq k (1+ k)))
;; return value
k))
(promising 2)
这应该return:
2
我是初学者,正在学习Lisp。我想使用循环语句将循环转到使用k的i值,但是出现以下错误。我觉得我括号写对了,但是我不知道为什么会出现这个错误。
LOOP: illegal syntax near (SETQ K (1+ K)) in
(LOOP WHILE (< K I) (SETQ K (1+ K)))
下面是我的代码。
(DEFUN promising (i)
(setq k 1)
(loop while (< k i) (setq k (1+ k)))
(return-from promising 1)
)
promising(2)
我看到几个小东西:
loop
语法不是 100% 正确,您漏掉了一个do
关键字
(loop while (< k i) do (setq k (1+ k)))
^^
do keyword is missing!
- 函数调用的语法
promising(2)
也不正确
(promising 2)
return-from
事情不寻常
第一个原因是 return 值始终是 1
,在您的情况下,您可能希望 return k
.
(DEFUN promising (i)
(setq k 1)
(loop while (< k i) (setq k (1+ k)))
(return-from promising 1))
^
Always return 1
第二个原因是您不需要 return-from
,defun
形式的最后一个值将提供给函数调用者。
(DEFUN promising (i)
(setq k 1)
(loop while (< k i) do (setq k (1+ k)))
k)
^
The last value will be returned to the function caller
k
变量应在本地 定义,而不是使用全局 定义
最终代码可能是这样的:
(defun promising (i)
(let ((k 1))
(loop while (< k i) do (setq k (1+ k)))
;; return value
k))
(promising 2)
这应该return:
2