2013-11-02 2 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을 사용해야 할 수도 있습니다. Fold는 함수와 초기 값을 매개 변수로 사용하는 함수라는 점을 제외하면 작성한 것과 거의 같습니다.

함수는 2 개의 매개 변수를 받아야합니다. 첫 번째 매개 변수는 현재 값이고 두 번째 매개 변수는 이전 호출 또는 초기 값에 의해 반환 된 값입니다.

관련 문제