
56
|
第二章
你可以使用
Fold
指令與遞迴的關係,進行更複雜的應用。例如,Mathematica 說明文件
中提供一個範例,利用
Fold
指令運算所有可能的子串列和。[Page-056]
當我第一次見到這個程式時,一時無法理解為什麼這個程式碼行得通,然而,藉由將其
轉換為遞迴函數定義,較容易理解此程式是如何運作的。
第一列的程式碼很直觀,空串列的子串列和只能為零。第二列則定義串列可能的子串列
和會是三個集合的聯集,分別為:串列的第一個元素、除去第一元素剩餘串列的可能子
串列和以及兩者的和。第三個集合
(First[l] + uniqueSums[Rest[l]])
提供我們此程式
可行的線索,它將純量與向量相加,即第一個元素將與剩餘串列的可能子串列和相加。
很明顯地,此遞迴函數並非最佳化版本,因為遞迴內部呼叫了自己兩次(可使用暫存變
數避免),但本文重點在於,你