没有正确检索列表索引处的字符?
Not retrieving the character at an index of a list correctly?
我正在编写一个递归遍历列表的程序,提供当前字符的索引和字符列表。但是,当我 运行 以下程序时:
(defun printAllElementsRecursively (index providedList)
(if (>= index (length providedList))
(return-from printAllElementsRecursively NIL)
)
(defvar currCharacter (nth index providedList))
(print (format nil "Character at index ~a: ~a" index currCharacter))
(printAllElementsRecursively (+ index 1) providedList)
)
(printAllElementsRecursively 0 '(A B B A))
我得到以下输出:
"Character at index 0: A"
"Character at index 1: A"
"Character at index 2: A"
"Character at index 3: A"
这看起来很奇怪,考虑到 index
的值确实递增。
你误用了 defvar
:
它应该永远不会在函数内部使用,使用let
代替或只使用(nth index providedList)
代替currCharacter
.
它定义一个新的全局变量,并且只有在还没有的情况下才设置它,所以它设置
currCharacter
仅一次。
你也不是真的需要return-from
,你的代码
如果使用破折号而不是驼峰式大小写,将更具可读性。
例如,
(defun print-list-elements-recursively (list)
(when list
(print (first list))
(print-list-elements-recursively (rest list))))
此外,nth
在其 list 参数的长度中是 linear,
所以你的函数是 quadratic (我的版本是 linear)。
我正在编写一个递归遍历列表的程序,提供当前字符的索引和字符列表。但是,当我 运行 以下程序时:
(defun printAllElementsRecursively (index providedList)
(if (>= index (length providedList))
(return-from printAllElementsRecursively NIL)
)
(defvar currCharacter (nth index providedList))
(print (format nil "Character at index ~a: ~a" index currCharacter))
(printAllElementsRecursively (+ index 1) providedList)
)
(printAllElementsRecursively 0 '(A B B A))
我得到以下输出:
"Character at index 0: A"
"Character at index 1: A"
"Character at index 2: A"
"Character at index 3: A"
这看起来很奇怪,考虑到 index
的值确实递增。
你误用了 defvar
:
它应该永远不会在函数内部使用,使用
let
代替或只使用(nth index providedList)
代替currCharacter
.它定义一个新的全局变量,并且只有在还没有的情况下才设置它,所以它设置
currCharacter
仅一次。
你也不是真的需要return-from
,你的代码
如果使用破折号而不是驼峰式大小写,将更具可读性。
例如,
(defun print-list-elements-recursively (list)
(when list
(print (first list))
(print-list-elements-recursively (rest list))))
此外,nth
在其 list 参数的长度中是 linear,
所以你的函数是 quadratic (我的版本是 linear)。