用线程模拟副作用

时间:2010-07-10 17:42:02

标签: functional-programming

我正在观看this第9频道的演讲,并在60分钟左右发表了一个非常有趣的声明。

他说,一旦引入线程,即使使用完全纯粹的函数,也可以模拟副作用。

他概述的方式是使用C-omega表示法,我不熟悉它,并且已经有相关的语言支持来做到这一点。

我遇到的问题是如何在没有赋值的情况下实现get和set消息处理程序?当然处理程序必须更改一个值,以便线程的内部循环可以记录一个新值?

我错过了什么?我如何在LISP中实现它,例如,没有特殊结构?

1 个答案:

答案 0 :(得分:6)

  

我遇到的问题是如何在没有赋值的情况下实现get和set消息处理程序?当然处理程序必须更改一个值,以便线程的内部循环可以记录一个新值?

是的,你是对的。 Erik假设每个线程都有自己的消息队列。使用Value(n)发送消息会明确更改消息队列的状态。他让它听起来比它更神秘:他只是为另一种形式的可变状态交易任务。他正在利用语言的“前置条件”功能使其语法清晰。

正如他所说,你可以使用传统的IO(他提到控制台IO)来做同样的事情。想象一下Value(n)n写入文件,前置条件Value(T t)检查状态的当前值是否为t(在文件中)。 Voilà,没有任务的可变状态(但现在涉及IO!)。