common-lisp - 使用 dolist 宏对列表求和
问题描述
我试图通过使用 dolist 宏来总结一个列表。但是,我做不到。它总是返回列表的最后一个元素。提前致谢。
(defun sumlist2 (l)
;;this function computes total of a list by using dolist macro
(let ((summ 0))
(dolist (obj l)
(setf summ (+ obj)))
summ))
解决方案
在 的主体中dolist
,您不会对变量求和summ
,而是将列表元素的值分配给它,因为(+ obj)
求和obj
没有其他值,因此返回obj
自身。换句话说,而不是:
(setf summ (+ obj))
你应该写:
(setf summ (+ summ obj))
或者,甚至更好:
(incf summ obj)
它执行加法。
最后请注意,您可以直接从 生成结果dolist
,例如:
(defun sumlist2 (l)
;;this function computes total of a list by using dolist macro
(let ((summ 0))
(dolist (obj l summ)
(incf summ obj))))
推荐阅读
- c# - 如何模拟实体框架核心变更跟踪
- azure-blob-storage - 如何在 azure 中读取和写入不可变 Blob 存储
- mongodb - Mongoose 5.6.1 上的大量连接
- javascript - 使用 JavaScript 将 svg 和 img 元素导出到同一个文件
- instagram - 如何检索应用程序的 Instagram 主页新闻提要?
- r - R Shiny Server 将不接受 UI 输入。声称“无效参数”
- java - tempCodeRunnerFile.jar 中没有主要清单属性
- git - 如何在 GIT 中更新 repo 中的分支
- java - 目录的单元测试存在 - Junit
- java - 从日期列表中获取下一个生日