有没有没有副作用但非引用透明的函数示例?
is there any example of function that has no side effect but non-referential transparency?
我知道副作用和非引用透明度是不同的意思。
"side effect, which implies some violation of referential transparency."
"Referential transparency means that an expression (such as a function call) can be replaced with its value; "
但是,我想知道有没有没有副作用但非引用透明的函数的例子
如果是,谁能给我一个例子(例如在 C 函数中)
引用透明意味着没有副作用:如果你可以用它的值替换一个函数returns就不会有副作用:该函数只能计算一个基于传递给它的值的值。
语句"side effect implies no referential transparency"正好是上面的对立句,逻辑上等价
您在问:
I wonder if there is any example of function that has no side effect but non-referential transparency If yes, would anyone give me an example
这是一个例子:
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)
的两次调用产生两个不同的值)。
考虑一个查询外部环境的函数,例如returns当前时间,或者硬盘上的空闲space等
我知道副作用和非引用透明度是不同的意思。 "side effect, which implies some violation of referential transparency." "Referential transparency means that an expression (such as a function call) can be replaced with its value; "
但是,我想知道有没有没有副作用但非引用透明的函数的例子 如果是,谁能给我一个例子(例如在 C 函数中)
引用透明意味着没有副作用:如果你可以用它的值替换一个函数returns就不会有副作用:该函数只能计算一个基于传递给它的值的值。
语句"side effect implies no referential transparency"正好是上面的对立句,逻辑上等价
您在问:
I wonder if there is any example of function that has no side effect but non-referential transparency If yes, would anyone give me an example
这是一个例子:
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)
的两次调用产生两个不同的值)。
考虑一个查询外部环境的函数,例如returns当前时间,或者硬盘上的空闲space等