1
我在Scheme中實現此程序時遇到了一些麻煩,儘管我認爲我在這方面達到了90%。不幸的是,我需要對此有點模糊,因爲這是一項家庭作業。在計劃中返回一個真實值
我需要一個列表作爲輸入,生成列表的所有可能的子序列,並返回符合特定條件的一個列表。我已經完成了代碼生成列表的所有子序列,並且還說明某個子集是否是解決方案。然而,我有計劃退還該解決方案的麻煩。我的代碼基本上是這樣的,現在
(define (function rest_of_list subsequence)
(if (subsequence is a solution) subsequence)
(if (> (length rest_of_list) 0) (function (cdr rest_of_list) (append subsequence (car rest_of_list))))
(if (> (length rest_of_list) 0) (function (cdr rest_of_list) subsequence)))
這段代碼應該做的是對列表中的每個元素,它的分支遞歸地在兩個方向。在一個方向上,它將(汽車rest_of_list)添加到子序列中並繼續向下。在另一個方向它忽略(汽車rest_of_list)並繼續下去。只要它找到一個可接受的子序列,它就會返回它,這就是函數function的結果。現在我只是得到空白輸出。我有點理解我爲什麼猜測,但不足以解決這個問題。
這絕對幫助我看到我做錯了什麼。看起來我現在修好了。需要在遞歸的每個步驟中明確定義哪個遞歸分支導致有效答案(或者如果兩者都選擇一個),而不是期望Scheme在程序語言返回true時返回。 – Outback