如果我们去糖do我们得到f n acc = getLine >>= \v -> f (n-1) (v : acc)fn acc = (>>=) getLine (\v -> f (n-1) (v : acc))
因此,我们看到f发生在>>=的第二个参数中,而不是在尾递归位置。显然,在块中将递归调用作为最后一行的不是一个足够的条件,一个函数是尾</em
我正在尝试使用尾递归本地辅助函数作为赋值的一部分来重写代码。all_except_option是一个返回类型为fn : string * string list -> string list option的函数 x :: all_except_option' str_list SOME (all_except_option' str_list)下面的函数</
all_true(bools+1, len-1);此函数可以以更明显的尾递归方式重写,如下所示: if (len我的问题是:如果一个编译器足够聪明地将第二个优化为尾递归调用,那么在"&&“短路的情况下,期望它以同样的方式对第一个进行优化是否合理呢?显然,如果使用非短路操作符,这将不是尾递归的,因为这两个表达式都会在运算符应用