Sql 如何计算Racket中列表树中的元素数?
我正在复习一些球拍练习,其中一个练习要求创建一个名为“count trees”的函数,该函数将计算ListTree中的所有元素。根据说明,ListTree是具有以下定义的递归数据结构: -它可以是一个整数 -它可以是列表,也可以是带有子列表的列表 -根据说明,我们假设列表树永远不能为空 下面是列表树的几个示例: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
(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
版本,但我想您稍后会了解到这一点