随笔分类 -  F#

F#学习:尾递归优化
摘要:拿简单的阶乘函数来举例,非递归版本可以简单的写成这样: 这个会被编译为:而将一个普通递归算法改成成尾递归的关键往往是,在参数列表中多加一个状态参数,这样在调用下一次递归的时候,本次调用时的信息就不需要保存了,避免了 StackOverflowException. F# 可以对尾递归自动做编译优化,变成循环来处理(不确定是否对所有尾递归都能做到?):这个版本的代码会被编译为:很明显可以看到代码的结... 阅读全文

posted @ 2010-07-28 11:50 NeilChen 阅读(762) 评论(0) 推荐(0) 编辑

F#学习:理解什么是“可区分联合”(Discriminated Union)
摘要: 可区分的联合也可以含有成员 (member). 如下列代码示例给二叉树添加了一个 Size 属性:以上用了模式匹配的语法来计算节点数(忽略了 Tip)。即:二叉树树的节点数 = 1(当前节点)+ l.Size (左子树节点数) + r.Size (右子树节点数)这里显然用了一个递归,我们用 Reflector 看看编译生成的代码:可以发现该代码仍然使用的递归,而没有做任何优化(大概是因... 阅读全文

posted @ 2010-07-28 00:50 NeilChen 阅读(1258) 评论(0) 推荐(0) 编辑

F#学习:类型的定义和使用语法
摘要:代码: 输出:Hi there, I'm Jack and I'm 30 years old. Hi there, I'm Tom and I'm 20 years old. Jack 20 type Person =   {Name: string;    Age: int;}   with     member SayHi... 阅读全文

posted @ 2010-07-27 19:05 NeilChen 阅读(575) 评论(0) 推荐(0) 编辑

导航

统计

点击右上角即可分享
微信分享提示