亚历山大手册包含一个用于测试序列长度的布尔函数:
功能: length=和rest序列 以任意顺序接受任意数量的序列或整数。返回真当且仅当所有序列和整数的长度相等。提示:如果第一个参数是字面整数,则有一个编译器宏扩展为更高效的代码。
第一句谈到“整数”(复数)。这仅仅是为了测试几个计算的整数是否相同,同时测试序列长度吗?还是有更深层次的意义?
第三句提供了优化。这是否意味着当到达文字索引时,对列表的计数会停止,如果lst很长,那么它可能比(= ( lst) 3)更有效吗?
发布于 2020-11-27 19:08:11
第一句谈到“整数”(复数)。这仅仅是为了测试几个计算的整数是否相同,同时测试序列长度吗?还是有更深层次的意义?
没有更深层次的意义。这可能只是为了对称。基本上,只有整数参数的(length= ...)只是一个速度较慢的=。但是这方面的主要用例是(length= 3 (some-list)),即测试某些序列是否具有特定的长度(“(some-list)产生的序列值是否长度为3?")。
第三句提供了优化。这是否意味着当到达文字索引时,对列表的计数将停止,如果
(= (length lst) 3)很长,那么它可能比lst更高效吗?
是的,实际上是这样的;编译器宏扩展为对sequence-of-length-p的调用,该调用(对于列表)做类似于此的事情(通过nthcdr)。
https://stackoverflow.com/questions/65042411
复制相似问题