vl排序理解。。。
大家好,谁能解释一下这里发生了什么?
(setq lst (list 1 5 7 20 4 44 123 15 54 327 20 4 44 76 12))
(vl-sort lst
'(lambda (a b) ( <(/ ab) 3)))
(setq lst (list 1 5 7 20 4 44 123 15 54 327 20 4 44 76 12))
(vl-sort lst
'(lambda (a b) ( >(/ ab) 3)))
我试图了解vl排序是如何工作的。。。 结果是(44 123 54 32 44 76 5 20 4 15 7 20 4 12 1)-我在这个列表中看不到任何顺序。。。。??? 我真的不明白你的分类标准。你试着对数字进行排序,使两个相邻项之间的除法结果小于3?!?
这种排序的结果将受到数字的初始顺序的影响,因此完全不可靠:
案例1:
(setq lst (list 1 5 7 20 4 44 123 15 54 32 7 20 4 44 76 12))
(vl-sort lst
'(lambda (a b) ( >(/ ab) 3)))
;Result: (44 123 54 32 44 76 5 20 4 15 7 20 4 12 1)
案例2:
(setq lst (list 7 20 4 44 76 7 20 4 44 12 123 15 54 1 5 32))
(vl-sort lst
'(lambda (a b) ( >(/ ab) 3)))
;Result: (76 20 44 123 54 4 7 20 4 12 15 32 5 1) 要了解vl-sort或vl-sort-i中的内容,您可以在同一论坛上看到我的帖子:http://www.cadtutor.net/forum/showthread.php?77049-用作排序比较运算符的LAMBDA表达式
它显示了如何将排序函数在每次迭代中比较的值打印到控制台。
vl sort将根据为每对测试项目提供的比较函数的返回,对给定列表中的项目重新排序。如果比较函数为两个参数返回T,这表明排序列表中第一个参数在第二个参数之前,因此通过比较所有对,vl sort将相应地改变列表顺序。有许多不同的算法使用这种比较排序技术(快速排序、合并排序、冒泡排序等等);vl排序函数实现的特定算法没有文档记录,但我猜想它可能使用了快速排序算法。
在理解排序算法的内部工作原理时,您可能会发现这条线索特别有趣。
您希望从函数中获得什么结果? 事实上,我误会了这种情况。。。这就是为什么我试图理解vl排序中的算法。。。谢谢你,李! 不客气!
页:
[1]