[英]bubble-sort procedure in scheme
我不明白為什么(bubble-sort!(vector 2 1))用我的代碼返回#(2 2)。
(define (bubble-sort! v)
(define (helper c orig-v n)
(cond
((< n 0)
v)
((> c n)
(helper 0 v (- n 1)))
((>= (vector-ref orig-v c) (vector-ref orig-v (+ c 1)))
(begin
(vector-set! v (+ c 1) (vector-ref orig-v c))
(vector-set! v c (vector-ref orig-v (+ c 1)))
(helper (+ c 1) v n)))
(else
(helper (+ c 1) v n))))
(helper 0 v (- (vector-length v) 2)))
我本人已遍歷代碼,但未發現問題。
在代碼v
和orig-v
中是相同的向量(如果將向量作為參數傳遞,則不會復制向量:這類似於“按引用調用”,因為在其他語言中稱為“按引用調用”)。
因此,在函數內部,您將處理作為參數傳遞的向量以及兩個表達式:
(vector-set! v (+ c 1) (vector-ref orig-v c))
(vector-set! v c (vector-ref orig-v (+ c 1)))
等效於:
(vector-set! orig-v (+ c 1) (vector-ref orig-v c))
(vector-set! orig-v c (vector-ref orig-v (+ c 1)))
因此,將2復制到第二個元素(包含1)中,然后將2復制回到第一個元素中,最終結果為#(2,2)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.