我正在嘗試編寫一個程序,該程序需要一個數字列表並將1添加到列表中的每個元素。同樣,如果列表爲0,它將返回NIL。我試着遞歸做它,但它顯示我沒有輸出。我知道這很簡單,但我是一個初學者,我很難遞歸思考這個問題。謝謝!通用LISP附加程序
-2
A
回答
0
如果你的任務需要你定義一個遞歸函數(比如用於一般性)做一些事情列表中的每個元素上,你可以使用這個成語
(cons (do-something-on (car my-list)) (my-fun (cdr my-list)))
,你
- 修改第1個要素
- 應用,你定義的列表的其餘部分
- 返回一個列表構造加入修改後的第1個要素和應用你定義到其餘的函數的結果的功能清單
這還不是全部,你必須考慮當你匆忙清單時會發生什麼...但這很容易,你可以編寫一個條件返回默認值(見上),如果列表是不是空的,否則nil
。
(if my-list (...) nil)
,或者使用的其他少if
的默認行爲,
(if my-list (...))
0
一個列表由cons
組成。它有第一個值和一個列表,除了第一個值外,其餘都是由列表組成。因此,您應該檢查您的列表是否爲null
(或者endp
這是相同的),並且如果它不是您使用first
計算出的cons
以及使用rest
的遞歸調用。作爲論據。
(add-1 '(1 . (2 . (3 .())))) ; ==> (2 . (3 . (4 .())))
或更常見的寫:
(add-1 '(1 2 3)) ; ==> (2 3 4)
相關問題
- 1. LISP程序
- 2. LISP程序輸出
- 3. LTE附加程序和Android
- 4. 程序DLL附加到CAB
- 5. 計劃附加程序
- 6. Emacs-Lisp:如何將emacs-lisp程序打包爲PC應用程序?
- 7. 爲應用程序添加附件包
- 8. 設計附加基地應用程序
- 9. 可能附加到Android應用程序?
- 10. 將FEST附加到應用程序
- 11. g ++將庫附加到應用程序
- 12. 附加內容Android應用程序
- 13. 附加到我的應用程序
- 14. 附加2個應用程序
- 15. 附加谷歌應用程序域名
- 16. 對附加應用程序的建議
- 17. 通用lisp中的程序集生成宏
- 18. 衡量一個通用lisp程序的性能
- 19. 加載遠程Lisp文件
- 20. 如何運行LISP程序
- 21. 變量在Lisp程序
- 22. Common Lisp程序錯誤
- 23. 在lisp程序結束後emacs lisp中的啓動過程
- 24. Visual Studio 2010通過「附加到進程」調試C++控制檯應用程序
- 25. LISP通過
- 26. 通過Java程序發送圖像到郵件而不附加?
- 27. 通用lisp散列表
- 28. LISP通用列表功能
- 29. 檢查通用lisp宏源
- 30. SBCL - 通用Lisp的錯誤
當你說「試圖寫一個_program_」你真的是「試圖寫一個_function_」?此外,你說你嘗試了一些不起作用的東西......如果你需要關於_你的解決方案的幫助,你最好發佈你現有的解決方案,否則沒有人會給你提供他們現成的解決方案。 – gboffi
「我試着遞歸做它,但它沒有顯示我輸出。」我不'看到你的問題。請注意,**尋求調試幫助的問題(「爲什麼不是這個代碼工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者沒有用處。** –
「這很簡單,但我是一個初學者,我很難遞歸思考這個問題。」爲什麼它會遞歸地進行遞歸? '(defun add-1(list)(mapcar'1+ list))''是什麼問題?你不需要知道mapcar是如何實現的(它*可以是遞歸的,但這是一個實現細節)。但你也可以''(在列表中收集x的循環(1 + x))''。這似乎是非遞歸的(儘管實現*可能是遞歸的),並且它也可以工作。這聽起來像你要麼承擔要求,要麼你有要求,你沒有說明。 –