2013-11-02 67 views
2

我是功能性編程的初學者,我希望能夠從控制檯讀取值到列表中,將該列表作爲參數傳遞,然後返回列表的總和方案。 (display-sum-list-members'(1 2 3 4 5))),但用戶必須在控制檯輸入這些值。傳遞列表作爲參數在方案中

這就是我的工作:

(begin 

    (define count 0) 


    (define sum-list-members 
     (lambda (lst) 
     (if (null? lst) 
     0 
     (+ (car lst) (sum-list-members (cdr lst)))))) 


    (display "Enter a integer [press -1 to quit]: ") 
    (newline) 

    (let loop ((i 0))    

     (define n(read)) 
     (sum-list-members (list n)) 

      (set! count i)  
      (if (not(= n -1))    

     (loop (+ i 1))) 

    ) 

    (newline) 

) 

回答

-1
(do ((mlist() (cons n mlist))(n (read)(read))) 
    ((= n -1) (display (apply + mlist)))) 
+0

爲什麼downvote?儘管我認爲'sum-list-members'是一個循環中的'cons'以創建一個列表,預計將列出顯而易見的論點。 – BLUEPIXY

0

使用雞的方案,我會做這樣的:

(define (read-number-list) 
    (map string->number (string-tokenize (read-line)))) 

定義你的sum-list-members這樣:

(define (sum-list-members lst) 
    (fold + 0 lst)) 

要得到string-tokenize工作,你可能不得不使用某種srfi。摺疊與您寫的幾乎完全相同,除了它是一個函數,它將函數和初始值作爲參數。

函數必須接收2個參數,第一個參數是當前值,第二個參數是前一次調用返回的值或初始值。