Clojure脚本处理yandex图片搜索和Youtube视频下载地址

Author:zhang Date:2015年11月25日 - 0:00 AM

论搜索能力, Yandex不再Google之下, 有时候比Google的结果要好, 下面的Clojure脚本将会抓取Yandex图片搜索的结果并提取所有图片的图片地址, 来源网址等信息, 这样可以在同一个界面中以原始大小显示所有图片.

more

Clojure之atom详解

Author:zhang Date:2015年5月14日 - 0:00 AM

atom是Clojure的同步原语中最基本的一个组件, 实现上没有什么特别的, 就是对Java的java.util.concurrent.atomic中的AtomicReference的一个wrapper. Atomic功能需要直接的CPU硬件的支持, 而不仅仅是一个第三方软件库而已. 所以应该先从这里讲起.

这个问题我觉得讲的最好的是"PThreads Primer A Guide to Multithreaded Programming" 的第六章 Synchronization.

more

关于Clojure STM write skew详解

Author:zhang Date:2015年5月4日 - 0:00 AM

考虑一个数据库系统重的普遍情形: 对同一个数据, 一个线程对其进行读取, 另一个线程写入, 两者同时发生. 如果不加控制, 结果肯定会出问题, 以表的一个行为例子, 可能一个线程更新了某个字段, 另一个字段还没有更新, 另一个线程就读取了这一行, 等两个线程都执行完成, 他们看到的数据肯定是不一致的. 为了解决这个问题, 最简单, 最直接的方式就是加锁, 读的时候锁定, 其他线程等待, 读完了之后释放, 写的时候也加锁, 其他线程访问的时候等待.

这样的问题也同样出现在多人并行开发的版本控制系统当中, 采用最简单的方法相当于, 某个开发人员修改代码的时候, 文件就会被锁住, 其他人不能访问, 只能干等. 很显然这样的模式可以保证数据的完整性, 但是要牺牲系统的效率.

more

Clojure宏练习: 让代码运行指定的时间段

Author:zhang Date:2015年5月1日 - 0:00 AM

在模拟某些事件的时候, 我们可能需要一个无限循环, 例如哲学家进餐的例子中, 就可能会用一个无限循环来模拟一个哲学家进餐的过程. 这样的弊端是, 一旦运行, 我们的REPL就无法返回, 唯一的办法就是强行终止JVM, 然后重开. 而实际上, 我们不一定需要这样做, 将无限循环变成运行指定的时间段同样可以达到模拟的效果, 而系统可以更加优雅的结束.

和dotimes一样, 我们可以用macro来做到这一点, 区别只是一个指定次数, 一个指定时间.

more

为什么Clojure的for loop不会栈溢出

Author:zhang Date:2015年4月17日 - 0:00 AM

Clojure中的for loop是用macro实现的, 我发现展开之后的代码中是包含递归的, 例如下面的代码,

展开之后

Update: 什么时候for loop会溢出

more

Continuation Monad和rest of the computation

Author:zhang Date:2015年4月12日 - 0:00 AM

最先接触的关于Continuation的东西是Scheme的call/cc, 因为过于怪异, 大脑始终没有翻转过来. 所以就浅尝辄止了. 这个障碍可能比接受LISP的语法还要大. 而要研究Monad, Haskell, Continuation是绕不过去的. Continuation是理解Monad的关键一环.

more

Windows系统上使用cabal

Author:zhang Date:2015年4月10日 - 0:00 AM

Haskell Windows系统上使用cabal安装package.

more

Page 1/4 前一页1234后一页
hello