string:substr/3
截取字符串
用法:
substr(String, Start, Length) -> Substring
从字符串 String 里截取一个从 Start 位置开始,长度是 Length 的子字符串 Substring。
string:substr("abcdefg", 3, 2).
Erlang 版实现的全排列:
Str = "abc", Len = length(Str), StrToListFun = fun(Start, AccList) -> Element = string:substr(Str, Start, 1), [Element | AccList] end, StringList = lists:foldr(StrToListFun, [], lists:seq(1, Len)), NormalizeFun = fun Normalize([], _N, _I, R) -> lists:reverse(R); Normalize([H | L], I, I, R) -> [H] ++ lists:reverse(R) ++ L; Normalize([H | L], N, I, R) -> Normalize(L, N + 1, I, [H | R]) end, PermutationFun = fun PermutationFun(N, [StrList, HeadList, Ret]) -> NewStrList = NormalizeFun(StrList, 1, N, []), IOStrList = HeadList ++ NewStrList, NewRet = [string:join(IOStrList, "") | Ret], if length(NewStrList) > 1 -> [Item | AccStrList] = NewStrList, AccLen = length(AccStrList), NewHeadList = HeadList ++ [Item], [_SL, _HL, PermutationLoopRet] = lists:foldr(PermutationFun, [AccStrList, NewHeadList, []], lists:seq(2, AccLen)), [StrList, HeadList, PermutationLoopRet ++ NewRet]; true -> [StrList, HeadList, NewRet] end end, [_StrList, _HeadList, RetList] = lists:foldr(PermutationFun, [StringList, [], []], lists:seq(1, Len)), RetList.