Common Lisp嵌套列表迭代改造:支持嵌套的列表反转与元素计数实现
Common Lisp嵌套列表适配函数修改方案
原有代码问题说明
- 仅处理列表顶层元素,未对子列表做递归判断,无法支持嵌套场景
- 函数内部使用
defvar定义变量,会创建全局可修改的特殊变量,多次调用函数会出现值污染,建议用let做局部变量绑定 countAppearance中用=做比较,仅支持数值类型,改用eql适配更多数据类型
修改后实现代码
countAppearance函数
(defun countAppearance (liste element) (let ((count 0)) (loop for item in liste do (cond ;; 当前元素是列表,递归统计子列表中的出现次数 ((listp item) (setf count (+ count (countAppearance item element)))) ;; 当前元素匹配目标,计数+1 ((eql item element) (setf count (+ count 1))))) count))
效果验证
调用(countAppearance '(1 (3 5) (3 7 8) 2) 3),返回结果为2,符合预期。
reverseList函数
(defun reverseList (liste) (let ((reversedList (list))) (loop for i downfrom (- (length liste) 1) to 0 do (let ((current-item (nth i liste))) ;; 当前元素是列表,先递归翻转子列表再加入结果 (setf reversedList (append reversedList (list (if (listp current-item) (reverseList current-item) current-item)))))) reversedList))
效果验证
调用(reverseList '(1 (2 3))),返回结果为((3 2) 1),符合预期。
内容的提问来源于stack exchange,提问作者gokbeykeskin
相关产品推荐
相关产品推荐

