需求
将一个数字列表由小到大进行排序
实现
-module(list).
-export([sortNum/1]).
sortNum([Num|List]) ->
sortNum([X || X <- List, X < Num])
++ [Num] ++
sortNum([X || X <- List, X >= Num]);
sortNum([]) -> [].
调用
> erl
> list:sortNum([4,8,5,2,1]).
[1,2,4,5,8]
分析流程
调用 list:sortNum([4,8,5,2,1]).
sortNum([4|[8,5,2,1]]) ->
sortNum([X || X <- [8,5,2,1], X < 4])
++ [1] ++
sortNum([X || X <- [8,5,2,1], X >= 4]);
调用 sortNum([X || X <- [8,5,2,1], X < 4]) ,等于 sortNum([2, 1])
sortNum([2|[1]]) ->
sortNum([X || X <- [1], X < 2])
++ [2] ++
sortNum([X || X <- [1], X >= 2]);
调用 sortNum([X || X <- [1], X < 2]) ,等于 sortNum([1])
sortNum([1|[]]) ->
sortNum([X || X <- [], X < 1])
++ [1] ++
sortNum([X || X <- [1], X >= 1]);
调用 sortNum([X || X <- [8,5,2,1], X >= 4]) ,等于 sortNum([8,5])
sortNum([8|[5]]) ->
sortNum([X || X <- [5], X < 8])
++ [8] ++
sortNum([X || X <- [5], X >= 8]);
调用 sortNum([X || X <- [5], X < 8]) ,等于 sortNum([5])
sortNum([5|[]]) ->
sortNum([X || X <- [], X < 5])
++ [5] ++
sortNum([X || X <- [], X >= 5]);
分析结果
流程5 返回 [5]
流程4 等于 流程5 ++ [8],结果 [5] ++ [8] = [5, 8]
流程3 返回 [1]
流程2 等于 流程3 ++ [2],结果 [1] ++ [2] = [1, 2]
流程1 等于 流程2 ++ [4] ++ 流程4,结果 [1, 2] ++ [4] ++ [5, 8] = [1,2,4,5,8]
试一下
有一个列表,里面的元素是商品的名字和价格,从高到低排序
List = [{apple, 120}, {milk,150}, {orange,155}, {paper, 10}, {book, 45}, {pen, 22}, {phone, 900}, {water, 20}]