LISP按2个参数对列表进行排序

Jakkie

我有一个这样的列表(preorder-mst)组成的列表:

((arc graph-id vertex-a vertex-b weight)((arc graph-id vertex-a vertex-b weight)...)

我想做的是按权重对子列表进行排序,如果2个权重相等,则按顶点b排序。

我试图调用一个函数来对元素进行排序

(sort preorder-mst 'compare-string-number)

(defun compare-string-number (firstLIST secondLIST)
    (if (eql (fifth firstLIST) (fifth secondLIST))
        (if (string-lessp (fourth firstLIST) (fourth secondLIST))
            (fourth firstLIST)
            (fourth secondLIST))
        (when T
            (if (< (fifth firstLIST) (fifth secondLIST))
                (fifth firstLIST)
                (fifth secondLIST)))))

它返回正确的值,但没有正确对它们进行排序。知道这有什么问题吗?

我的(不需要的)输出:

(((ARC GRAFO_TEST_1 CI 2)(ARC GRAFO_TEST_1 GH 1)(ARC GRAFO_TEST_1 NIL A 0)(ARC GRAFO_TEST_1 BC 8)(ARC GRAFO_TEST_1 AB 4))

弯腰

排序中使用的谓词是这样的:它们接受两个参数并返回true或false。如果谓词返回true,则排序时优先考虑第一个参数,否则考虑第二个参数。要了解有关sort如何工作及其谓词的更多信息,请参见此处

请记住,几乎所有值在Lisp中都是“真实的”,而空列表或nil为假。在hyperspec中可以看到术语广义布尔值

您的函数几乎总是返回true,因为它返回要比较的元素且它们具有真实值。要解决此问题,您必须自己返回比较:

(defun graph-sort-p (firstLIST secondLIST)
  (if (= (fifth firstLIST) (fifth secondLIST))
      (string-lessp (fourth firstLIST) (fourth secondLIST))
      (< (fifth firstLIST) (fifth secondLIST))))

(sort my-list  #'graph-sort-p)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按2个参数对Laravel集合进行排序

来自分类Dev

按 2 个属性对模型列表进行排序

来自分类Dev

替代方法:使用“键功能”按两个参数对列表进行排序

来自分类Dev

如何按 2 列对列表进行排序

来自分类Dev

linq按2个参数排序

来自分类Dev

如何按其参数对数组列表进行排序?

来自分类Dev

我可以按2个键对对象列表进行排序吗?

来自分类Dev

按第一个值对具有2d列表的字典进行排序

来自分类Dev

在Java中按2个不同的子对象对对象列表进行排序

来自分类Dev

使用 linq 按对象的 2 个属性对对象列表进行排序

来自分类Dev

按列表A的排序对列表B进行排序?

来自分类Dev

按两个元素对嵌套列表进行排序

来自分类Dev

按约束词法对两个变量列表进行排序

来自分类Dev

如何在Common Lisp中按特定顺序对列表进行排序?

来自分类Dev

按参考对列表进行排序

来自分类Dev

按列对列表进行排序

来自分类Dev

按最后 2 位数字对数字列表进行排序

来自分类Dev

按另一个列表的排序顺序对列表进行排序

来自分类Dev

按2个属性对对象数组进行排序

来自分类Dev

按值对2个键哈希进行排序

来自分类Dev

JavaScript按2个值对数组进行排序

来自分类Dev

按2个属性对对象数组进行排序

来自分类Dev

按日期的2个属性对对象数组进行排序

来自分类Dev

PHP-如何按值对2个变量进行排序?

来自分类Dev

如何按子列表的长度对3个或更多列表列表进行排序

来自分类Dev

按内部列表的第一个元素对列表列表进行排序(Java或groovy)

来自分类Dev

按成员列表的长度对列表进行排序

来自分类Dev

按列表大小对结构列表进行排序

来自分类Dev

按嵌套列表的值对列表进行排序

Related 相关文章

热门标签

归档