如何在只有cons,first,rest和empty時將元素添加到列表末尾(空之前) ?並且可以使用cond遞歸Scheme將元素添加到列表的末尾
2
A
回答
5
想想你將如何實現append
(或者更一般地說,考慮如何實現一個正確的摺疊)。現在,如果您將一個列表附加到包含要添加元素的單例列表中,那麼您基本上已添加了您的元素。
(很顯然,這是O(n),所以不要添加元素逐一這種方式。)
下面是一個使用對摺的解決方案:
(define (append-element lst elem)
(foldr cons (list elem) lst))
和解決方案使用append
:
(define (append-element lst elem)
(append lst (list elem)))
因此,如果您可以實現foldr
或append
自己,使用你列出的操作(很簡單!嘗試它),你很好去。
P.S.事實上,你可以使用對摺執行append
:
(define (append lst1 lst2)
(foldr cons lst2 lst1))
但仍然讓你實現自己foldr
。 ;-)(提示:它很容易看my implementation of left-fold開始的想法。)
2
這看起來像功課,所以我給你一些指點,讓你步入正軌,填充了空白:
(define (add-last lst ele)
(cond ((empty? lst) ; if the list is empty
<???>) ; create a one-element list with `ele`
(else ; if the list is non-empty
(cons <???> ; cons the first element in the list
<???>)))) ; with the result of advancing the recursion
以上可以在cons
,first
,rest
,empty?
和cond
方面來實現,無需其它程序。
相關問題
- 1. 將元素添加到NSMutableArray的末尾
- 2. GData將\添加到元素末尾
- 3. 將一個元素添加到列表的末尾,方案
- 4. 將列添加到文件的末尾
- 5. 如何將元素添加到指定頭的指針列表的末尾?
- 6. 添加到列表的末尾在LISP
- 7. 添加到鏈接列表的末尾
- 8. 的Python - 移動在詞典列表元素添加到列表的末尾
- 9. 我無法將元素添加到C中的鏈接列表末尾
- 10. 將元素添加到列表末尾的最簡單方法是什麼?
- 11. 將$ b的元素添加到數組$ a的末尾php
- 12. 將項目添加到隊列末尾
- 13. 添加元素到鏈表末尾時遇到問題
- 14. 如何將新元素添加到JSON文件的末尾?
- 15. 將一個新元素添加到節點(Java)的末尾
- 16. 如何將元素添加到矩陣的末尾?
- 17. 如何在OpenCL中將元素添加到數組的末尾?
- 18. 將元素添加到Java LinkedList的末尾,同時迭代它
- 19. 將每行末尾的元素添加到文件中
- 20. 手動將元素添加到提取數組的末尾
- 21. 如何刪除元素並將其添加到ArrayList的末尾?
- 22. 將節點添加到鏈表末尾
- 23. 將一個元素移到帶有flexbox的列表的末尾
- 24. 反向交替元素並附加到列表的末尾
- 25. 將字符串添加到元組列表中的每個元組的末尾
- 26. 將elemet添加到列表的末尾 - 來自Android的AWS DB
- 27. 將節點添加到C中的列表的末尾
- 28. Java - 將一個節點添加到列表的末尾?
- 29. 如何將項目添加到鏈接列表的末尾?
- 30. 將項目添加到鏈接列表的末尾 - >錯誤
只需注意:如果我們忽略了這個家庭作業的人爲限制,那麼在列表末尾添加一個元素* E *爲:*(append L(list E))*。添加到列表的末尾可能會很昂貴,因此如果沒有其他上下文,請求的操作是大多數程序員將避免的情況,除非問題域需要它,即使如此,普通的香草列表可能也不是正確的數據結構。 – dyoo