将列表作为Scheme中的参数传递

时间:2013-11-02 18:26:10

标签: scheme

我是函数式编程的初学者,我希望能够将控制台中的值读入列表,将该列表作为参数传递,然后返回Scheme中列表的总和。

我想得到这样的结果:(显示(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)

)

2 个答案:

答案 0 :(得分: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个参数,第一个参数是当前值,第二个参数是前一个调用返回的值或初始值。

答案 1 :(得分:-1)

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