摘要:
之前在TryFsharp上发不过一系列F#的东西,现在挪到这来了:),列一下:入门1:http://www.cnblogs.com/tryfsharp/archive/2011/12/31/2308503.html入门2:http://www.cnblogs.com/tryfsharp/archive/2011/12/31/2308504.html入门3:http://www.cnblogs.com/tryfsharp/archive/2012/01/04/2312153.html入门4:http://www.cnblogs.com/tryfsharp/archive/2012/01/04/2 阅读全文
摘要:
继上一篇的深度遍历,下面实现以下图的广度遍历,广度遍历中使用到了队列, 即代码中的let nodesQueue = new Queue<Node>(),由于F# 中没有指针,如果我们需要在递归中保存一个随时会发生变化的值时,我会选择ref类型的变量。 下面顺便说说ref类型变量的一些基本操作:let x = ref 1 定义一个ref类型的变量let getValue = !x !x用来获取此ref变量的值,这里将其值赋给了getValue变量x:=2 将x 的值变为2let newValue = !x 这里,变量newValue的值就是2了。接下来就是此遍历的具体代码了,没有什. 阅读全文
摘要:
下面是图中的深度遍历F# 版本,如果有问题还请各位看官不要吝啬指正:)。Graph类在我之前的随笔中已经定义过了,这边直接使用了。type GraphOperations(graph : Graph) = ///depth-first traversal member this.DFSTraverse(action : unit -> unit, startNodeId : string, endNodeId : string) = let visited : string array = Array.zeroCreate graph.Nodes.Length ... 阅读全文
摘要:
前段时间从涛哥那学了一招——在递归里面使用Continuation 来避免大量的局部变量的使用,从而避免StackOverflow. 下面是一个小的例子:查找整数数组中的第K大的数:在递归中使用Continuation来避免StackOverflow(查找第K大的数):[<AutoOpen>]module Kmaxtype public Sort() = static member KMax(iArr : int array, kmax : int) = let iLen = iArr.Length match kmax with | sma... 阅读全文
摘要:
这是在工作之余弄了些这个,做的也不太好,留个纪念,今后要用可以做个笔记:)namespace FSharp.Graph#if INTERACTIVE#r "System.Xml.dll"#r "System.Xml.Linq"#endifopen Systemopen System.Xml.Linqopen System.Xmltype Graph() = let mutable nodes = [] let mutable edges = [] member this.Nodes with get() = nodes member this.Edges 阅读全文