如何在scheme中查找未使用的列表/过程?

如何在scheme中查找未使用的列表/过程?,scheme,chicken-scheme,unused-variables,Scheme,Chicken Scheme,Unused Variables,我正在清理一些(鸡)方案代码,我想确定在给定程序中未使用的所有列表/过程。是否有一个特定的选项可以传递给Chicken编译器或csi-s我可以这样做,而无需列出define和grep-ing以获取*.scm脚本中的标识符?您可以使用repl函数,并将跟踪在对参数调用eval之前,如果它是列表或lambda,则使用符号。无法决定将使用哪些顶级条目,因为可以动态地构建表达式: (eval (list (string->symbol "+") 1 2)) → 3 有必要评估程序的所有可能排列

我正在清理一些(鸡)方案代码,我想确定在给定程序中未使用的所有列表/过程。是否有一个特定的选项可以传递给Chicken编译器或
csi-s
我可以这样做,而无需列出
define
grep
-ing以获取
*.scm
脚本中的标识符?

您可以使用repl函数,并将跟踪在对参数调用eval之前,如果它是列表或lambda,则使用符号。

无法决定将使用哪些顶级条目,因为可以动态地构建表达式:

(eval (list (string->symbol "+") 1 2)) →  3

有必要评估程序的所有可能排列。

如果您将代码放入模块中,则在编译时会显示一条关于未使用、未报告的标识符的警告(您可能需要使用
csc-v
来显示它们).

也许这只是我对repl缺乏经验,但我不认为这会有什么帮助。这并不难。SICP的第4章对此进行了解释。请查看evaluator()的这个实现。您所要做的就是在meta eval lambda中添加一些代码,以跟踪它使用的符号。(如果您需要扩展符号UTIL,您可以使用symbol->关键字lambda进行漂亮的打印)。只需将所有符号名转储到文件端口。您将得到所使用的列表或lambda(过程?测试)的所有名称。不要忘记从meta-repl内部加载主程序。但是,对于这个问题,假设代码中没有使用这种方法。