以列表作为参数的 defun

2024-02-11

我正在尝试选择 Lisp 作为我的新语言,但我在解决如何让函数的一部分作用于传递给它的列表的每个元素上时遇到了一些问题。

为了学习如何解决这个问题,我试图编写一个相当基本的除法形式,当列表的一个元素为 0 时不会发出声音(而是只返回 0)

(defun divtest (elements)
  (dolist (x elements)
    (if (zerop x) 0 () )
  (/ elements)))))

我尝试将其运行为:

(divtest '(20 2 5))

其结果是:

*** - /: (20 2 5) is not a number

失败点似乎根源于这样一个事实:我在将列表中的元素传递给函数之前没有“提取”它们(在这种情况下, / 和 dolist 都没有按预期工作,因为 x 永远不会计算为 0)。 如果我是对的,有人可以告诉我如何进行这种“提取”吗?


注:此问题涉及我之前问过的一个 https://stackoverflow.com/questions/8937121/typesafe-and-arguement-safe-division-in-common-lisp,但由于我不清楚之前答案的哪一部分实际上允许它按预期解决这个特定问题,所以我决定进一步深入基础知识


/接受一个或多个数字作为参数,但在你的代码中你传递给它一个列表 - 显然这是行不通的。功能apply你的朋友在这里吗-(apply #'foo a b (list c d e))相当于(foo a b c d e)。请注意参数apply要使用的函数和最终列表之间是可选的,所以(apply #'/ '(20 2 5))相当于(/ 20 2 5).

此外,您尝试删除零将不起作用。dolist正在评估参数列表中每个项目的主体elements,但你实际上并没有做任何事情来改变内容elements(评估结果dolists 主体没有像您预期的那样重新分配给源元素)。

功能remove-if(及其破坏性的对应物,delete-if)是您正在寻找的。下面展示了如何使用它(它需要很多可选参数,为此您无需担心)。

(defun divtest (elements)
  (apply #'/ (remove-if #'zerop elements)))

另请注意,如果elements列表的第一个元素为零(假设我理解该函数的含义)。所以你可能想要类似的东西

(defun divtest (elements)
  (apply #'/ (first elements) (remove-if #'zerop (rest elements))))

有关更多详细信息,请参阅超规范。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以列表作为参数的 defun 的相关文章

  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • Scheme/Lisp 嵌套循环和递归

    我正在尝试解决方案中的一个问题 该问题要求我使用嵌套循环或嵌套递归 例如我有两个列表 我必须检查它们的笛卡尔积的条件 解决这些类型问题的最佳方法是什么 有关如何简化这些类型的函数的任何指示吗 I ll elaborate a bit sin
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • 为什么 LISP 中符号名称中的连字符是约定俗成的?

    这个推荐的理由是什么 为什么不与使用下划线的其他编程语言保持一致 我认为 LISP 使用连字符有两个原因 历史 和 因为你可以 History LISP 是一种古老的语言 在早期输入下划线可能会很困难 例如 我用于 LISP 的第一个终端是
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 从 CCL 检索(加载)源代码?

    我打了电话 load code lisp 用CCL 然后不小心删除了code lisp 有什么办法可以找回源代码吗 CCL 在内存中是否有它 这是一个非常特殊的功能 这里只为克洛祖尔CL 该代码在其他地方不起作用 这在 CCL IDE 中对
  • 学习 Lisp 的资源 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 emacs 中自动回答是或否

    I binded function semantic symref to key C c C r like this global set key kbd C c C r semantic symref everytime I presse
  • SBCL初始化文件

    我想知道应该在哪里保存 sbclrc 文件 我尝试将其保存在我的 sbcl 文件夹中 但它似乎不起作用 我使用的是 Windows XP 和 Emacs 版本 23 我正在尝试设置 asdf install 这就是为什么我要修改初始化文件
  • Scheme (Lisp) 中树的深度反转

    我对Scheme中的基本树数据结构进行了深度逆向 define deep reverse t cond null t not pair t t else cons deep reverse cdr t deep reverse car t
  • 我为什么要学习 Lisp? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么我们在 Lisp 中需要 funcall?

    为什么我们必须使用funcall在 Common Lisp 中调用高阶函数 例如 为什么我们必须使用 defun foo test func args funcall test func args 而不是更简单的 defun bar tes
  • Lisp:使用语法糖访问递归哈希

    我正在尝试构建一个函数 或宏 来简化哈希表深处数据的获取和设置 也就是说 哈希中的哈希 哈希中的哈希等 我不认为我可以用宏来做到这一点 而且我不知道如何用 eval 来做到这一点 我希望能够执行以下操作 gethashdeep HEROES
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • 使用Lisp或Scheme进行Java程序的运行时配置

    我现在看到几个项目在实际配置取决于仅在运行时可用的东西时结束 配置 Java 程序的典型方法是根据某些应用程序特定规则读取一个或多个属性文件 然后根据它们的值采取操作 在某一时刻 这种情况会崩溃 您需要在配置中使用实际的程序逻辑 然后可以用
  • 关于onlisp中的广义变量

    我不确定这里发生了什么 文中的宏观示例 基本上不知道如何使用get setf 方法 一个内置宏 也许是函数 具体来说 如果某些返回值是这样的情况呢 get setf 方法为零 例如 get setf 方法 x NIL NIL NEW 306
  • Scheme 和 Common Lisp 之间的实际区别是什么? (或任何其他两种 Lisp 方言)

    注意 我并不是在问学哪个 哪个更好或者诸如此类的问题 我选择了 SICP 的免费版本 因为我觉得它读起来很好 我听说过有关它的好东西 并且我对编程的这一方面很感兴趣 我知道Scheme 是Lisp 的一种方言 我想知道 Scheme 和Co
  • 以表格形式连续调用/评估?

    大家好 简单的问题 使用 XLISP 编写程序 但我似乎遇到了一个我似乎无法解决的简单基本问题 也许有人有一个快速解决方案 我正在尝试编写一个 if 语句 该语句的 then 子句评估多种形式并返回最后一种形式的值 在示例中 setq PO
  • LISP 非常简单的列表问题

    我正在学习 lisp 而且我对此还很陌生 所以我想知道 如果我这样做 defparameter list 1 list 1 2 defparameter list 2 list 2 3 defparameter list 3 append
  • Lisp 函数如何记住这段代码中的状态?

    我从网站上看到一段代码http www ccs neu edu home shivers newstyle html http www ccs neu edu home shivers newstyle html gt defun elem

随机推荐

  • Dropbox Saver 可以接受来自 createObjectURL() 的数据吗?

    Dropbox Chooser 和 Saver 工具 https www dropbox com developers dropins对于这两项任务来说似乎非常酷 让用户从 Dropbox 中选择一个文件 页面就可以下载它 即 Dropbo
  • 块与 Objective-C 中的普通方法和函数有何不同?

    与 Objective C 中的普通方法和函数相比 使用块有什么优势 我已阅读文档 但找不到块而不是其他语言功能的具体用法 我确信我错过了一些东西 所以有人可以用比现有文档更简单的方式解释块的优点吗 块是一种包装一段代码并有效存储它以供以后
  • 将 Angularjs 和 Rails 应用程序分离为独立组件

    我想尝试一下 Angularjs 然而 我一直难以决定应该将我的角度应用程序放在哪里 我使用 Rails 框架作为后端 我看过教程 其中整个角度应用程序都位于 asset javascript 文件夹下 我想知道是否可以让它完全位于我的ra
  • Tailwind CSS:有没有办法定位下一个兄弟?

    我有一个带有如下标签的无线电输入 输入被隐藏 标签用于制作一个视觉上吸引人的圆圈供用户单击
  • receiveCompletion 出错时订阅取消

    在我的以 MVVM 模式设计的应用程序中 我有一个登录视图 如果存在网络或身份验证问题 登录可能会失败 我的目标是捕获错误并显示相应的警报 我为警报定义了枚举 如下所示 enum Alerts Identifiable var id Int
  • Application Insights 是否跟踪引荐来源网址?

    我想我到处查看和搜索 但找不到任何带有推荐流量数据的图表或报告 我使用的是在预览 Azure 门户中存储数据的最新版本 在旧的应用程序洞察中 即在 VS Online 中 有此数据 有谁知道在新门户中是否可以找到它以及在哪里可以找到它 提前
  • Centos 7 Postgres 服务的环境变量

    最近我遇到了使用自定义 PGDATA 路径启动 postgresql 服务的问题 它尝试查找未初始化的默认数据目录 var lib pgsql 9 3 data 因此触发了这些错误 问题似乎是 Centos 7 上的服务启动器删除了所有环境
  • 如何在 Android 上将文件从内部应用程序存储移动/重命名到外部存储?

    我正在从互联网下载文件并将流数据保存到我的应用程序内部存储中的临时文件中获取文件目录 http developer android com reference android content Context html getFilesDir
  • IllegalArgumentException:类 TestDatabaseAutoConfiguration$EmbeddedDataSourceFactoryBean 中没有可见的构造函数

    我正在尝试使用 h2 数据库为 Spring Boot JPA 应用程序编写集成测试 不知何故 TestEntityManager 没有被创建 我尝试在论坛上寻找一些帮助 但找不到任何相关信息 感谢任何人可以提供帮助或提供一些指导 Than
  • 将 wc 行附加到文件名

    标题说明了一切 我已经设法得到这样的行 lines wc file txt awk print 1 但我可以使用辅助功能将其附加到文件名中 向我展示如何循环遍历当前目录中的所有 txt 文件的奖励积分 find name txt execd
  • 在 mac、ios、linux 上使用 calibri 风格

    由于 Windows 操作系统中存在 calibri 样式 但 linux mac ios 中不存在 calibri 样式 如果我的项目仅在 calibri 中具有其样式 并且我必须严格使用它 那么如果用户使用linux 并运行我的项目 那
  • 在android中使用Geocoder获取地址

    我尝试通过提供静态地理坐标来获取特定位置的地址 我无法获取地址 有人可以帮忙吗 我只需要检查这个功能是否适合我 这是我的片段 Geocoder geocoder new Geocoder AddressSimulator this Loca
  • 如何使用 docker-compose 将环境变量设置到 docker 容器中

    我想设置凭据以使用 Google Translate Api 客户端 因此我必须设置环境变量GOOGLE APPLICATION CREDENTIALS该值是凭证文件的路径 来自 Google Cloud 当我被利用的时候docker bu
  • 将未知长度的 char** (c) 转换为 vector (c++) [重复]

    这个问题在这里已经有答案了 如何将 C char 转换为 C 矢量 是否有一些内置功能可以用来做到这一点 或者通过一系列迭代步骤来完成它是否更好 编辑 由于各种原因 C 数组中的元素数量未知 我可以将其作为另一个参数传递 但这绝对有必要吗
  • 如何在反应中使用复选框形式?

    有两个组件container and presenter 下面的代码显示单个复选框状态变为 true 并且另一个复选框也正在更新 那么 如何处理具有状态的多个复选框 容器 export default class ApplyFormCont
  • 为什么点击设置innerHTML会在Chrome上触发两个解析事件?

    使用Chrome开发者工具中的时间轴 我使用了这一小段代码来记录事件内部HTML
  • 如何分发 Android 库

    我一直在为 android 库项目旋转一个 jar 并将这个 jar 包含在我的其他应用程序中 但在developer android com上 http developer android com tools projects index
  • REST API 404:URI 错误或缺少资源?

    我正在构建 REST API 但遇到了问题 设计 REST API 时公认的做法似乎是 如果请求的资源不存在 则返回 404 然而 对我来说 这增加了不必要的歧义 传统上 HTTP 404 与错误的 URI 相关 所以实际上我们是说 要么你
  • 将 ILMerge 与 .NET 4 库结合使用

    两个问题 1 基本 NET 程序集不包含在 ILMerged 程序集中 从 NET 3 5 Visual Studio 2008 升级到 NET 4 Visual Studio 2010 后 我在构建后使用 ILMerge 时遇到问题 我有
  • 以列表作为参数的 defun

    我正在尝试选择 Lisp 作为我的新语言 但我在解决如何让函数的一部分作用于传递给它的列表的每个元素上时遇到了一些问题 为了学习如何解决这个问题 我试图编写一个相当基本的除法形式 当列表的一个元素为 0 时不会发出声音 而是只返回 0 de