【发布时间】:2021-04-02 02:39:05
【问题描述】:
我构造了一个名为find-all 的函数,通过“递归”查找系列中给定项目的所有索引。
第一次调用find-all 会给出正确的输出。但是从第二次调用开始,所有输出都被附加在一起。
find-all: function [series found][
result: []
either any [empty? series none? s-found: find series found]
[result]
[append result index? s-found
find-all next s-found found]
]
;; test:
probe find-all "abcbd" "b" ;; output [2 4] as expected
probe find-all [1 2 3 2 1] 2 ;; output [2 4 2 4]
既然用function创建的函数内部的变量是局部变量,为什么在后面的函数调用中变量result的值还在,导致第二次调用find-all的result没有开始[]?
实现此功能的正确递归方式是什么?
【问题讨论】: