2014-01-09 33 views
0

我正在清理一些(雞)計劃代碼,我想確定在給定程序中沒有使用的所有列表/程序。是否有一個特定的選項可以傳遞給雞編譯器或csi -s我可以使用這樣做,而不用列出每個definegrep -ing的*.scm腳本中的標識符?如何在計劃中找到未使用的列表/程序?

回答

0

您可以使用eval unit的repl函數並傳遞給一個評估函數,該函數在調用參數的eval之前跟蹤該符號(如果它是列表或lambda)。

+0

也許這只是我缺乏repl的經驗,但我不明白這會有什麼幫助。 –

+0

這並不難。全部在SICP的第4章中解釋。看看這個評估器的實現(https://github.com/jacktrades/Scheme-Meta-Circular-Evaluator)。你所要做的就是在meta-eval lambda中添加一些代碼,以跟蹤它使用的符號。 (如果您需要擴展符號實用程序,則可以使用符號 - >關鍵字lambda來進行良好的打印)。只需將所有符號名稱轉儲到文件端口即可。你將最終得到所有使用的列表或lambda表達式(過程?測試)的名稱。不要忘記從meta-repl中加載主程序。 – ramrunner

0

不可能決定哪些頂級條目將被使用,因爲它可以動態手藝表達式:

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

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

+0

但是,對於這個問題,假設代碼中沒有使用這種方法。 –

0

如果您將代碼放入模塊中,編譯時會顯示關於未使用的未導出標識符的警告(您可能需要使用csc -v來顯示它們)。