println函数怎么不纯? (Clojure的)

时间:2017-11-29 21:22:35

标签: function clojure println

它总是返回 nil

这不是说它纯粹吗?

println 会导致任何副作用吗?

2 个答案:

答案 0 :(得分:6)

副作用大致可以定义为“修改函数本身未包含的任何状态”。这包括写入磁盘或进行某种外部API调用等。由于println写入STDOUT,它正在改变标准输出的状态。因此它有副作用。

答案 1 :(得分:4)

  

它总是返回 nil

     

这不意味着它是纯粹的吗?

只有它没有副作用才意味着它是纯净的。

  

println 会导致任何副作用吗?

是的,打印出来。

如果它没有副作用,那将是非常无聊的,因为它也没有任何明智的回报。

我更喜欢术语引用透明度纯度。如果您可以在不改变程序含义的情况下将其替换为其值(反之亦然),则表达式或函数是引用透明的。这意味着println是透明的 IFF 我可以用println替换任何nilnil println println而不改变程序的含义。显然,你不能这样做,因此,brew install heroku/brew/heroku并不是指称透明/纯粹。