存档
在Erlang中的两种递归写法 普通递归: recursive_sum([H|T]) -> H+recursive_sum(T); recursive_sum([]) -> 0. 尾递归: sum(L) -> sum(L, 0). sum([H|T], Sum) -> sum(T, Sum + H); sum([], Sum) -> Sum. 在Erlang文档效能向导部分有说明,尾递归比普通递归更快。 普通递归H+recursive_sum(T);在recursive_sum(T);返回之前H都会被压入stack等到返回结果再计算。 递归越深,内存将被吃的越多。面向过程编程或者面向对象编程也会常用到递归函数。当在Erlang这种函数式编程里无疑将更经常使用递归函数。所以更应该注意递归函数的效率和系统开销。 反过来在面向过程或者面向对象的语言中也可以用尾递归来提高效率减少系统开销。
在虚拟机上安Winodws 7测试快半年了,RC版出来正式安起来跑跑。 安装过程记录: 1. 上微软Windows 7站点获取测试CD-KEY下载最新的ISO到本地,解压缩到D:\windows7。 2. 复制D:\windows7目录下的boot、efi目录bootmgr、bootmgr.efi文件到C:\ 3. 创建C:\sources 并拷贝 D:\windows7\sources\boot.wim 到 C:\sources 4. 从Vista里提取32位版的bootsect.exe或者现成下载 放到C:\目录下 5. 开始->运行->CMD回车运行C:\bootsect.exe /nt60 C: 回车 6. 重启将进入安装界面 备注:如果是从一个无系统的硬盘安装,可以用 WINPE 引导系统按上面步骤进行。如果是已经安了XP或者VISTA的可以直接在系统里进行上述步骤 7. 进安装界面下一步看到 INSTALL NOW 这时候点左下角的 Repair your computer 选着第一项下一步看到System Recovery Options对话框 8. 选CommandPrompt 如果要纯净的安装windows 7 在命令行提示符下 format C:/fs:ntfs /q清硬盘 如果原来已经有系统想双系统 Del bootmgr Del bootmgr.efi Del boot Del efi [...]
io:format(lists:flatten(array:to_list(array:new([{size,16},{default,"~.16b"}])), “~n”), binary_to_list(erlang:md5(“hello”))). 之前一直以为上面这段MD5没问题,突然有个地方用到,调试了1天发现居然是这个~.16b有问题,当md5的二进制值小于16时少了一位。比如 7 ~.16b的结果是7其实MD5字符串表示应该用两个字符串表示一个16进制值,所以应该是07。 换了一段仔细看了个详细。 -module(md5). -export([md5_hex/1]). md5_hex(S) -> Md5_bin = erlang:md5(S), Md5_list = binary_to_list(Md5_bin), lists:flatten(list_to_hex(Md5_list)). list_to_hex(L) -> lists:map(fun(X) -> int_to_hex(X) end, L). int_to_hex(N) when N < 256 -> [hex(N div 16), hex(N rem 16)]. hex(N) when N < 10 -> $0+N; hex(N) when N >= 10, N < 16 -> $a + [...]