TradingView 的 Pinescript - 为什么不允许递归?
TradingView's Pinescript - why isn't recursion allowed?
docs状态:
Pine Scipt functions do not support recursion. It is not allowed for a function to call itself from within its own code.
为什么会这样?
因为在 Pine 中,为了调用一个函数,它必须在您调用它的点上方的代码中完全定义。在递归函数中,您试图在完全定义之前调用同一个函数,因此 Pine 还“不知道”该函数。
在下面的示例中,function_a()
可以从 function_b()
中调用,因为它在编译器到达 function_b()
时已经定义,所以它在那个时候是“已知的”。
但是,function_c()
无法调用 function_d()
,因为此时尚未定义,导致编译器抛出错误。
//@version=4
study(title = "Study", overlay=true)
function_a(n) => 2 * n
function_b(n) => 3 * function_a(n)
function_c(n) => 4 * function_d(n)
function_d(n) => 5 * n
plot(na)
这同样适用于递归函数,例如下面的阶乘计算。
当我们试图从自身内部调用 factorial()
函数时,该函数的定义尚未完成,因此该函数在代码中的那个点是“未知的”,导致编译器抛出一个错误。
//@version=4
study(title = "Study", overlay=true)
factorial(n) =>
if (n <= 1)
1
else
n * factorial(n-1)
plot(na)
docs状态:
Pine Scipt functions do not support recursion. It is not allowed for a function to call itself from within its own code.
为什么会这样?
因为在 Pine 中,为了调用一个函数,它必须在您调用它的点上方的代码中完全定义。在递归函数中,您试图在完全定义之前调用同一个函数,因此 Pine 还“不知道”该函数。
在下面的示例中,function_a()
可以从 function_b()
中调用,因为它在编译器到达 function_b()
时已经定义,所以它在那个时候是“已知的”。
但是,function_c()
无法调用 function_d()
,因为此时尚未定义,导致编译器抛出错误。
//@version=4
study(title = "Study", overlay=true)
function_a(n) => 2 * n
function_b(n) => 3 * function_a(n)
function_c(n) => 4 * function_d(n)
function_d(n) => 5 * n
plot(na)
这同样适用于递归函数,例如下面的阶乘计算。
当我们试图从自身内部调用 factorial()
函数时,该函数的定义尚未完成,因此该函数在代码中的那个点是“未知的”,导致编译器抛出一个错误。
//@version=4
study(title = "Study", overlay=true)
factorial(n) =>
if (n <= 1)
1
else
n * factorial(n-1)
plot(na)