顶级列表中所有数字的总和

时间:2016-02-01 22:06:44

标签: scheme lisp

我是Scheme的新手,我花了大约一个星期的时间。

  

编写一个Lisp函数sumlist,它获取一个列表并返回顶级列表中所有数字的总和。从而,   (sumlist'(1 2(3)(4 a)nil b 5))应返回1 + 2 + 5 = 8 。数字3和4不在顶层。使用号码?检查一个东西是否是一个数字。"

这是我到目前为止所拥有的。它可以识别某些内容是否为数字,但我无法将其添加到最高级别的数字

$('select').on('change', function() {
    if($('option:selected').text() == 'without') {
        $('input').prop('disabled', false);
    }
    else {
        $('input').prop('disabled', true);
    }
});

感谢任何帮助。

编辑:绝地和丹尼尔的答案都有效。非常感谢你们。

2 个答案:

答案 0 :(得分:3)

我认为它可以更简单一些:

(define (sumlist lst)
    (cond
        ((null? lst) 0)
        ((number? (car lst)) (+ (car lst) (sumlist (cdr lst))))
        (else (sumlist (cdr lst)))))

由于您只关心元素是否为数字,因此只有3种情况。

答案 1 :(得分:2)

(define (sumlist lst)
(cond ((null? lst) 0)   ;; list is empty, we're done ;;
   ((number? (car lst)) (+ (car lst) (sumlist (cdr lst)))) ;; the first item is a number, so we add it to the rest
   (else (sumlist (cdr lst))) ;; the first item was not a number, we just check the rest of the list
))