具有类型函数的非纯参数的函数可以是纯函数吗?

Can functions with non-pure arguments of type functions be pure?

以非纯函数作为参数的函数如果不change/store直接声明、不引用全局变量等,是否可以被视为纯函数? 我们在哪里以及如何划清纯与非纯的界限,是仅在函数的相关代码上划清界限,还是我们考虑调用参数的影响?

例如想象一下这个场景,其中纯函数代表一个无状态的工作流,并将在此工作流中执行的一些操作作为参数。这些动作之一改变了某处的某些状态。所以如果我严格地看我的工作流的实现,它看起来很纯粹,但最终它确实通过调用这个修改状态的参数函数来修改状态。 我很想推测工作流也是非纯粹的,但传递一个不改变状态的不同参数会使它变得纯粹,所以我很困惑。

任何帮助将不胜感激。谢谢。

(define (its-not-me launch-rockets)
   (lambda () 
      (launch-rockets)))

确实很纯。它不发射火箭,它只是构建一个 willif 调用的计算。但是仅仅构建这样的计算不会产生副作用。

(define (it-is-me launch-rockets)
   (launch-rockets)
   ((its-not-me launch-rockets)))

确实发射了火箭,两次。不管是直接的还是间接的,都没有关系。如果它在执行期间引起副作用,它 会在执行期间引起 副作用

如果我们有

(define (launch-rockets)
   (if (prime? (random-integer))
      (do-actually-launch-rockets)
      (list 'do-nothing)))

没有任何变化。第一个仍然是纯的,构建一个可能导致副作用的计算是不纯的。

甚至

(define (launch-rockets)
   (if (prime? (random-integer))
     (list 'i-am-only)
     (list 'kidding)))

不是纯函数,因为它 使用 非纯函数,即 随机性 。对于相同的参数,纯函数总是 return 相同的结果。