macros - 关于函数 alexandria:length= 的说明
问题描述
Alexandria Manual 包含一个用于测试序列长度的布尔函数:
功能:length= &rest 序列
以任意顺序取任意数量的序列或整数。如果所有序列的长度和整数相等,则返回 true。提示:如果第一个参数是文字整数,则有一个编译器宏可以扩展为更高效的代码。
第一句话谈到“整数”(复数)。这仅仅是为了测试几个计算的整数是否相同,同时测试序列长度吗?还是有更深层次的意义?
第三句提供了优化。这是否意味着当达到文字索引时,对列表的计数将停止,如果 lst 很长,它可能比 (= (length lst) 3) 更有效?
解决方案
第一句话谈到“整数”(复数)。这仅仅是为了测试几个计算的整数是否相同,同时测试序列长度吗?还是有更深层次的意义?
没有更深层次的意义。这可能只是为了对称。基本上,(length= ...)
只有整数参数只是一个较慢的=
. 但它的主要用例是(length= 3 (some-list))
,即测试某个序列是否具有特定长度(“序列值是否由(some-list)
长度为 3 产生?”)。
第三句提供了优化。这是否意味着当达到文字索引时,对列表的计数将停止,从而使其可能比
(= (length lst) 3)
iflst
is longy 更有效率?
是的,事实就是这样;编译器宏扩展为一个调用sequence-of-length-p
,(对于列表)执行类似于(通过nthcdr
)的操作。
推荐阅读
- reactjs - 如何在 Azure DevOps Pipeline 中处理 React Config.js 文件
- c# - Visual Studio 项目正在引用已删除的共享项目
- javascript - 如何将 FormData 转换为对象?
- python - 如何从 tkinter python 中的浏览中获取所选文件的路径?
- asp.net-core - 使用 IIS 重新启动 asp.net 核心应用程序实际上并没有正确地重新启动应用程序,因为 program.cs 没有执行
- swift - 如果我为 AppStore 创建一个具有不同捆绑 ID 的新方案,我会向 AppStore Connect 发布一个新应用吗?
- php - 加载模板部件的 ACF 选择字段不起作用
- visual-studio - 如何在 c# 中转换这段代码以使其在 c++ 中工作?
- umbraco - Umbracco、表格和富文本编辑器
- compilation - Raku 程序编译和执行的顺序(可能是嵌套编译阶段?)