XYX365 发表于 2013-7-23 13:24:23

sort

本帖最后由 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.

f126054488 发表于 2013-7-23 15:11:07

學習到好多,謝謝大大

vivienluo 发表于 2013-7-23 21:30:29

写得很详细,学习了。

skyzeng 发表于 2013-7-24 09:44:57

{:soso_e179:}学习了

duan 发表于 2013-8-16 04:14:07

楼主辛苦了!

DavidRobin 发表于 2018-4-25 17:48:42

学习了!

wuye3424 发表于 2019-1-29 21:24:16

666666666666666666666666666666666666666666666666666
页: [1]
查看完整版本: sort