识别Clojure中的不纯函数

时间:2016-10-20 01:56:53

标签: clojure functional-programming

我正在学习Clojure和函数式编程(来自python)。在Clojure中,可以制作不纯的功能,因为您可以使用slurp和其他输入方式。有没有办法在Clojure中轻松识别不纯的函数,或者只是将这些函数保存在代码的单独部分中?

2 个答案:

答案 0 :(得分:1)

理论上,没有办法确定一个函数是否产生副作用(由于Rice的定理)。因此,将纯函数与不纯函数区分开来可能是不可能的。当然,可能有一种方法可以检查一个函数在语法层面是否绝对不纯,但我怀疑这在实践中是否真的有用。

答案 1 :(得分:1)

有一个很常见的convention来结束一个带有爆炸的函数名称(例如。swap!),其中该函数在STM事务中使用是不安全的。这包括IO和许多类型的副作用,因此这里与杂质有一些重叠,但是,许多不纯的功能也是完全安全的。