随笔分类 - CSharp
摘要:JScript不是天然支持CPS,但是可以写一个分发引擎使得能工作在CPS风格下。一般只有一个活动的continuation,所以可以定义规则:JScript CPS 函数允许有返回,但是它们做的最后一件事必须是将continuation告诉我们的分发引擎。 为了让事情简单化,我们令每个CPS 风格
阅读全文
摘要:给出一个计算树深度的函数: 现在要用CPS风格重写这个函数。 避免函数的返回值,而是将返回值传入continuation。记住,continuation就是这个函数完成后需要做的事情。于是写出如下代码 这里假定加法和求最大值不写成CPS风格,以降低难度。 现在需要组合递归调用。考虑第二个递归调用,嗯
阅读全文
摘要:程序中为什么需要栈stack? 普通的程序中,接触到子程序和函数的概念,很直观地,调用子程序时,会首先停止当前做的事情,转而执行被调用的子程序,等子程序执行完成后,再捡起之前挂起的程序,这有可能会使用刚才子程序计算出的数据。但是在程序被挂起的地方重新捡起程序并继续执行需要一个机制,即,存储当前所做事
阅读全文
摘要:除了.net自带的Concurrent系列的线程安全集合,有时候我们可以有自定义的实现,比如使用锁(lock),但是这使得并发性下降。本文将利用Interlocked类实现线程安全的队列。 首先定义一个辅助类Node,这个节点类将作为队列中的元素。 private class Node { publ
阅读全文
摘要:再谈continuation monad上一篇中我们已经介绍了continuation monad,但是这个monad与Identity,Maybe,IEnumerable monads稍微难于理解,故本篇再次讨论。首先解决上一篇中最后关于continuation monad的问题,即以下这段代码目...
阅读全文
摘要:了解Haskell语言的朋友都知道它是一门纯函数式编程,输出结果只跟输入参数相关,这导致Haskell不能有输入输出函数,因为不同的环境下,输入相同,但输出可能有所不同。Haskell语言中,变量的值一旦被赋值,则不会再被修改,所以这也导致了它就无法输出——因为输出会改变屏幕。那Haskell中如何...
阅读全文
摘要:有时候我们写好的类库中,某些类的属性和方法不应该暴露出来,那么如何对这些非public的方法和属性进行单元测试?MS为我们提供了PrivateObject类,可以解决这个问题,可以去MSDN的说明文档中查看这个类的介绍。本文也试举一例,说明其用法。首先给出被测试类,为了比较全面,我们在其中包含了pu...
阅读全文

浙公网安备 33010602011771号