3

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

我想得到这个结果: (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)

)
4

2 回答 2

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个参数,第一个参数是当前值,第二个参数是之前调用返回的值或初始值。

于 2013-11-03T10:51:10.293 回答
-1
(do ((mlist () (cons n mlist))(n (read)(read)))
    ((= n -1) (display (apply + mlist))))
于 2013-11-02T19:38:08.150 回答