计算列表中的总项目数量?

时间:2014-04-14 16:11:45

标签: scheme racket

    (define mylist (list (list 'a (list 'b 'c)) (list 'b (list 'a 'd))
            (list 'c (list 'a 'd)) (list 'd (list 'c 'b 'a))))

    (define (total1 L)
            (+ (length (cdr (car L))) (total1 (cdr L))))

我的目标是计算子列表的长度并将此值相加。

长度(('b'c)+('a'd)+('a'd)+('c'b'a))

所以我的函数应该返回9.但是当我调用这个函数时,我得到了这个错误:

汽车:合同违规   预期:对?   给出:()

我应该做什么?

1 个答案:

答案 0 :(得分:0)

要解决此错误,您应该引入一项测试来检查您是否在列表的末尾。像这样:

(define (total L)
    (if (null? L)
        0 ;has to be 0 because it will be +'ed in the recursion
        (+ (length (cdr (car L))) ;should be (car (cdr (car L))) or (cadar L)
           (total (cdr L)))))

但是这段代码仍然给出了错误的结果,因为(cdr (car L))返回第一个子列表的((b c)),并且长度为1,因为它是一个包含1个元素的列表,列表为{{ 1}}。你想要的是(b c)