2017-10-16 51 views
0

當前列表中刪除第一個值我正在使我的自定義對象作爲參數的函數,然後從該對象中的列表中獲取第一個參數,將其返回並從對象中刪除它。代碼是:從計劃

(define (make-source sequence . xs) 
    (let ((a (if (not (null? xs)) 
       xs 
       (list #f)))) 
    (cond ((string? sequence) (append (string->list sequence) (list a))) 
      ((vector? sequence) (append (vector->list sequence) (list a))) 
      (else (append sequence (list a)))))) 

(define (next src) 
    (if (equal? (car src) '(#f)) 
     #t 
     (let ((a (car src))) 
     (set! src (make-source (cdr src))) 
     a))) 

問題是next返回值而不更改對象。 你能幫我解決問題嗎? 另外,是否有可能從該列表中刪除元素而不創建新的函數?

回答

1

set!突變綁定而不是變量指向的對象。這是幾乎所有當今的編程語言的相同:

def f(a): 
    a = 10 

x = 20 
f(x) 
x 
// => 20 

爲什麼不x10是你的答案爲什麼next不會改變的對象。變量實際上被設置,但是它是局部變量,它在函數的結尾處停止存在。

在Scheme中編程的慣用方式不是嘗試實現面向對象,而是使用map或摺疊對你的結構做些什麼。例如。

(define (sum-numbers lst) 
    (foldl + 0 lst)) 

(sum-number '(1 2 3)) 
; ==> 6