在Elisp中比较两个数字列表?

4

所以,我可以使用cl来完成这个任务:

(loop for x in my-list
      for y in my-other-list
      if (> x y) return t
      if (< x y) return nil)

但是我真的觉得这应该像这样简单:(list> my-list my-other-list)。但我无法找到任何名称为此函数的证据。实际上,我甚至找不到任何关于比较列表的一般文档。完全没有。这让我感觉我可能漏掉了什么。

我必须自己定义 (list>) 吗,或者在匆忙和混乱中错过了大量的文档?

如果我必须自己定义它,你能做得更好吗?我不是一个真正的elisp黑客。

2个回答

8
这个怎么样:
(require 'cl)
(every '> my-list my-other-list)

那绝对比我的好,谢谢!但同时,我把这当作证据,证明我对核心Lisp函数文档并不是完全糊涂的。 - quodlibetor
当然。我不会期望有一个预定义的 list< 函数,因为这种方式很容易实现。同时,也存在一些歧义,即 list< 函数是否等同于 someevery 或仅仅是 mapcar* 的结果。 - Michael Hoffman
合理,尽管我不同意潜在的歧义(我认为人们会期望它应用于整个列表 - 因此不是“一些”,并且像所有其他布尔函数一样返回单个值而不是列表 - 因此不像mapcar*。但每个函数的实用性让我觉得这只是文档问题而不是语言问题。 - quodlibetor
请注意,此版本不适用于排序谓词,如果您实际上是在尝试这样做的话。 - Joseph Garvin
2
顺序关系不同!问题描述中的顺序关系是列表的字典序,而答案则涉及逐个坐标的顺序。例如,列表'(2 1)和'(1 2)将导致一个顺序返回true,而另一个则返回false。 - Ruy
显示剩余2条评论

2
Elisp 提供的最接近的可能是 version-list-<

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接