Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何计算Racket中列表树中的元素数?_Sql_Racket - Fatal编程技术网

Sql 如何计算Racket中列表树中的元素数?

Sql 如何计算Racket中列表树中的元素数?,sql,racket,Sql,Racket,我正在复习一些球拍练习,其中一个练习要求创建一个名为“count trees”的函数,该函数将计算ListTree中的所有元素。根据说明,ListTree是具有以下定义的递归数据结构: -它可以是一个整数 -它可以是列表,也可以是带有子列表的列表 -根据说明,我们假设列表树永远不能为空 下面是列表树的几个示例: (list 1 2) (list (list 1) 2 (list 1 4 5)) (list 1 (list 2 1) 1

我正在复习一些球拍练习,其中一个练习要求创建一个名为“count trees”的函数,该函数将计算ListTree中的所有元素。根据说明,ListTree是具有以下定义的递归数据结构:

-它可以是一个整数

-它可以是列表,也可以是带有子列表的列表

-根据说明,我们假设列表树永远不能为空

下面是列表树的几个示例:

(list 1 2)

(list (list 1)
       2
      (list 1 4 5))

(list 1
       (list 2 1)
        1
        1)
现在,我的代码是这样的:

(define count-tree (lambda (lst)
                   (if (empty? lst)
                       0
                       (length (lst)))))

当我执行该函数时,它只在有一个列表时工作,而不在包含子列表的列表上工作。它似乎只计算有多少个列表,但我希望它计算列表中的所有元素。有办法吗?谢谢

长度可以这样实现:

(define length 
  (lambda (lst)
    (if (empty? lst)
        0
        (+ 1 (length (cdr lst))))))
因此:

(length '((1 2) (3 4))) 
; ==> 2
因为列表有两个元素。这两个元素都是两个列表,其中也包含元素,而函数需要这样做。因此,您的函数需要比
length
多做一件事。如果
car
中有一对,则需要对
car
cdr
的递归求和,否则与
length
相同

还有更聪明的
length
版本,但我想您稍后会了解到这一点