我在語言中亂搞,需要一些幫助。我想創建一個交換函數,第一個交換與第二個交換。所以如果(交換'(a b c d e g)) 應該返回(b a d c e g)。我不想存儲任何值。在方案中有沒有功能或方法?我不知道我是否會這樣定義想在編程中交換元素
(DEFINE列表1(LIST 'A' B 'C' d「E))的列表
然後不知道該怎麼辦
我在語言中亂搞,需要一些幫助。我想創建一個交換函數,第一個交換與第二個交換。所以如果(交換'(a b c d e g)) 應該返回(b a d c e g)。我不想存儲任何值。在方案中有沒有功能或方法?我不知道我是否會這樣定義想在編程中交換元素
(DEFINE列表1(LIST 'A' B 'C' d「E))的列表
然後不知道該怎麼辦
訣竅是一次處理兩個元素,交換它們並推進遞歸中的兩個元素。這就是我的意思是:
(define (swap lst)
; if the list is empty or has a single element
(cond ((or (null? lst) (null? (cdr lst)))
; then return that list
lst)
; otherwise build a new list
(else
; by first adding the second element
(cons (cadr lst)
; and then adding the first element
(cons (car lst)
; finally, advance the recursion over two elements
(swap (cddr lst)))))))
我相信,在討論的採樣輸出是錯誤的,哪裏來自f
?比如我所期待的結果將是:
(swap '(a b c d e g))
=> '(b a d c g e)
(swap '(a b c d e))
=> '(b a d c e)
(swap '(a))
=> '(a)
(swap '())
=> '()
哦,我很抱歉你的權利。謝謝您的意見。幫助了我很多。我從來不懂用代碼打字的人,但你做得很好。 –
我會的。其實是另一個問題當你有cond是空的時候? (cdr lst)))這是否意味着你拿出列表中的第一個元素並放入下一個2?和cadr實際上做了什麼。如果你能通過[email protected]給我發電子郵件,那也可以嗎? –
如果列表中有奇數個元素,我們必須詢問是否存在'(null?(cdr lst))',因爲在這種情況下最後(單個)元素不能交換。 '(cadr x)'是'(car(cdr x))'的縮寫,'(cddr x)'是'(cdr(cdr x))'的縮寫,等等......你明白了。抱歉,我不通過電子郵件回答問題 –
http://stackoverflow.com/questions/13564575/swap-two-elements-in-list-in-scheme –
那不是我想要的東西。 –
這沒有幫助。 –