我是函数式编程的初学者,我希望能够将控制台中的值读入列表,将该列表作为参数传递,然后返回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)
)
答案 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))))