Side effects 是否有任何函数示例没有副作用,但具有非引用透明性?

Side effects 是否有任何函数示例没有副作用,但具有非引用透明性?,side-effects,Side Effects,我知道副作用和非参考透明度意味着不同的事情。 “副作用,这意味着违反了引用透明度。” “引用透明性意味着表达式(如函数调用)可以替换为其值;” 然而,我想知道是否有任何函数的例子没有副作用,但具有非引用透明性 如果是,请给我举个例子(例如在C函数中)参考透明度意味着没有副作用:如果可以用函数返回的值替换函数,则不会有副作用:函数只能根据传递给它的值计算值 “副作用意味着没有参考透明度”的说法只是上述的反正关系,在逻辑上与之等价。引用透明度意味着没有副作用:如果可以用函数返回的值替换函数,则不会有

我知道副作用和非参考透明度意味着不同的事情。 “副作用,这意味着违反了引用透明度。” “引用透明性意味着表达式(如函数调用)可以替换为其值;”

然而,我想知道是否有任何函数的例子没有副作用,但具有非引用透明性
如果是,请给我举个例子(例如在C函数中)

参考透明度意味着没有副作用:如果可以用函数返回的值替换函数,则不会有副作用:函数只能根据传递给它的值计算值


“副作用意味着没有参考透明度”的说法只是上述的反正关系,在逻辑上与之等价。

引用透明度意味着没有副作用:如果可以用函数返回的值替换函数,则不会有副作用:函数只能根据传递给它的值计算值

“副作用意味着没有参考透明度”这句话正好与上述相反,在逻辑上与之相当。

你在问:

我想知道是否有任何函数没有副作用但具有非引用透明性的例子如果有,有人能给我举个例子吗

以下是一个例子:

int globalValue = 0;

 int f(int x)
 {
   globalValue++;
   return x + globalValue;
 }

 int g(int x)
 {
   return x + globalValue;
 }
// assuming the compiler orders the methods to execute from top to bottom
int p = f(1) + // f(1) == 2 , globalValue == 1 : side effect
        g(1) + // g(1) == 2 , globalValue == 1 : no side effect
        f(1) + // f(1) == 3 , globalValue == 2 : side effect
        g(1);  // g(1) == 3 , globalValue == 2 : no side effect
在本例中,
f
执行一个副作用,它不是引用透明的,而
g
不执行副作用,但它也是非引用透明的(因为
g(1)
的两个调用产生两个不同的值)。

您在问:

我想知道是否有任何函数没有副作用但具有非引用透明性的例子如果有,有人能给我举个例子吗

以下是一个例子:

int globalValue = 0;

 int f(int x)
 {
   globalValue++;
   return x + globalValue;
 }

 int g(int x)
 {
   return x + globalValue;
 }
// assuming the compiler orders the methods to execute from top to bottom
int p = f(1) + // f(1) == 2 , globalValue == 1 : side effect
        g(1) + // g(1) == 2 , globalValue == 1 : no side effect
        f(1) + // f(1) == 3 , globalValue == 2 : side effect
        g(1);  // g(1) == 3 , globalValue == 2 : no side effect

在本例中,
f
执行副作用,并且它不是引用透明的,而
g
不执行副作用,但是它也是非引用透明的(因为
g(1)
的两个调用产生两个不同的值).

考虑一个查询外部环境的函数,例如返回当前时间或硬盘上的可用空间等。

考虑一个查询外部环境的函数,例如返回当前时间或硬盘上的可用空间,等等。

那么,你能举一个没有副作用但非参考透明度的函数的例子吗?如果有一个你无法观察到的副作用,那就足够了吗?那么,如果我把问题改为“没有功能性副作用但非参考透明度”该怎么办那么,你能举一个没有副作用但非参考透明度的函数的例子吗?如果有一个你无法观察到的副作用,那就足够了吗?那么如果我把问题改为“没有功能性副作用但非参考透明度”呢?