【发布时间】:2016-05-10 00:44:05
【问题描述】:
另一个逻辑问题,任务是找到一个列表的深度,例如:给定一个(A B (C D (E))) 的列表,它应该以某种方式指示深度为2(如果包含基本列表,则为3)。我仅限于一组常见的 Racket 功能,我将在下面列出。我在哪里可以遍历列表,但最终在第一个子列表处停止,即:(A (B (C)) (D (E (F)))) 仅作为 2 个出现。
以下是可用功能列表:
- 缺点、汽车、cdr、定义、报价、if、cond、else
- 算术的基本形式(+、-、*、/)
- 非常基本的测试(null?、list?、eq?、数字比较)
到目前为止,这是我的定义,如果有人能将我转向正确的方向,我将不胜感激。
(define (len l) (if (null? l) 0 (+ 1 (len (cdr l)))))
(define A '(A (B) (C (D))))
(define (depth l) (cond
[(null? l) '()]
[(list? (car l)) (cons (car l) (depth (car l)))]
[else (depth (cdr l))]
))
(depth A)
(len (depth A))
【问题讨论】:
标签: list recursion lisp racket depth