Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9461|回复: 5

[skill函数] sort

[复制链接]
发表于 2013-7-23 13:24:23 | 显示全部楼层 |阅读模式
本帖最后由 XYX365 于 2013-7-26 11:13 编辑

sort函数作用
将输入列表按给定的比较函数排序,输出排序后的结果。
注意:本函数会修改原列表。
函数定义
sort(
    l_data  
    u_comparefn
)=> l_result

参数
第一个参数(l_data)是输入列表,第二个参数(u_comparefn)是 比较函数。
输出是列表

參考: sklangref.pdf->p472

示例:
1.比較函數是nil的情况下,只是按字符顺序排列,也就是使用比較函數為alphalessp,
   在列表裡中是純數字就會產生Error
1.jpg

2.列表中是纯数字元素,可以用lessp来从小到大排列,或者用greaterp从大到小排列
2.jpg
3.如果只想按位比较ASC码的大小,alphalessp
x='("c1" "a2" "b3" "d4" "a1" "2d" "1a")
sort(x 'alphalessp)  =>  ("1a" "2d" "a1" "a2" "b3" "c1" "d4")
这个alphalessp和nil木有区别。

4.列表里的元素是数字+字符的话, axlStrcmpAlpNum
sort( '("u3" "u1" "u9" "u11" "u36")  'axlStrcmpAlpNum)  =>  ("u1" "u3" "u9" "u11" "u36")
sort( '("u3" "u1" "d9" "u11" "u36")  'axlStrcmpAlpNum)  =>  ("d9" "u1" "u3" "u11" "u36")
由后一个例子可见,字符位按ASC码,之后再按字母后面的数字大小来排列

5.自定义比较函数
procedure( strlenlessp(a b)
    strlen(a)>strlen(b)
)
lStr='( "a" "ab" "abcd" "abc" "abcde")
sort( lStr 'strlenlessp)=>'("abcde" "abcd“"abc" "ab" "a" )
编写比较函数很简单,默认a,b为前后输入的2个数据,只要给出这2个数据比较遵循什么规律,那么这个排序方式就定下来了。

本函数修改了输入列表
y = '(c a d b)
(sort y nil) => (a b c d)
y => (c d) ;no longer points to head of list
y = '(c a d b)
y = (sort y nil) => (a b c d)
y => (a b c d) ;reassignment points y to sorted list.

评分

参与人数 1贡献 +2 收起 理由
vivienluo + 2 赞一个!

查看全部评分

发表于 2013-7-23 15:11:07 | 显示全部楼层
學習到好多,謝謝大大
发表于 2013-7-23 21:30:29 | 显示全部楼层
写得很详细,学习了。
发表于 2013-7-24 09:44:57 | 显示全部楼层
{:soso_e179:}  学习了
发表于 2013-8-16 04:14:07
楼主辛苦了!
支持 反对

发表于 2019-1-29 21:24:16 | 显示全部楼层
666666666666666666666666666666666666666666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-3-29 23:22 , Processed in 0.151473 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表