|
本帖最后由 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
2.列表中是纯数字元素,可以用lessp来从小到大排列,或者用greaterp从大到小排列
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. |
评分
-
查看全部评分
|