|
|
1
3
我能更流利地用通俗的Lisp。
|
|
|
2
2
斯万特答案的R5RS翻译: (define (accumulate op init seq)
(define (iter ans rest)
(if (null? rest)
ans
(iter (op ans (car rest))
(cdr rest))))
(iter init seq))
(define (flatten seq)
(accumulate append '() seq))
(define (flatmap op seq)
(flatten (map op seq)))
(define (atom? x)
(not (pair? x)))
(define (paths tree)
(if (atom? tree)
(list (list tree))
(flatmap (lambda (node)
(map (lambda (path)
(cons (car tree) path))
(paths node)))
(cdr tree))))
|
|
|
3
0
我认为您可以将示例树定义为(root left right)每个树都是一个列表。所以您的示例树是:(D(B(A()(C()(F()G)))E()),这更容易遍历 |
|
|
4
0
你需要一个树搜索算法。广度优先或深度优先遍历都可以,在这种情况下,这两种遍历没有区别,因为您需要对整个树进行爬网。无论何时到达叶子,只要将当前路径存储在结果中即可。 |
|
|
Joe · 如何修复“无法更改常量”错误 8 年前 |
|
|
xnv23 · 使用方案中的变量创建环境 8 年前 |
|
|
Jaro · racket:处理jpeg文件 8 年前 |
|
|
Atonic · 提供语法规则Racket 8 年前 |
|
|
Zelphir Kaltstahl · 程序开始时的当前延续 8 年前 |
|
|
user8866063 · 在递归过程中打印 8 年前 |
|
|
Nime · 生成递归和结构递归之间有什么区别? 8 年前 |