Recursion 如何在lisp中打印树而不使用dolist,只使用递归?
投入:(A(B(D(E)(F))(C)(K)) 我目前有两个函数,它们为我提供以下输出: A B C K B D D E F E 零 但是,我需要这样的输出:Recursion 如何在lisp中打印树而不使用dolist,只使用递归?,recursion,printing,tree,lisp,common-lisp,Recursion,Printing,Tree,Lisp,Common Lisp,投入:(A(B(D(E)(F))(C)(K)) 我目前有两个函数,它们为我提供以下输出: A B C K B D D E F E 零 但是,我需要这样的输出: a:bck b:d c: k: d:EF e: f: 或 a b s k d EF 节点 首先应该定义:节点的一些数据结构函数 nodepthing->thing是节点吗 节点名称节点->返回节点名称 节点子节点节点->返回节点的子节点 宽度优先 然后我将定义一个函数以宽度优先的顺序遍历一棵树 宽度优先树fn&可选队列 此函数将按
a:bck
b:d
c:
k:
d:EF e: f: 或 a b s k d EF 节点 首先应该定义:节点的一些数据结构函数
thing->thing是节点吗nodep
节点->返回节点名称节点名称
节点->返回节点的子节点节点子节点
树fn宽度优先
队列&可选
FN
FN
CL-USER 76 > (breadth-first '(A (B (D (E)
(F)))
(C)
(K))
(lambda (node)
(princ (node-name node))
(princ ":")
(mapc (lambda (child)
(princ (node-name child)))
(node-children node))
(terpri)))
A:BCK
B:D
C:
K:
D:EF
E:
F:
我不明白这个问题这是什么意思?您的问题缺少一个有用的预期输入和输出示例。@RainerJoswig更改了它,是否更清楚?@RainerJoswig刚加入stack,忘记添加所有信息,这些函数应该做什么?我可以阅读代码,但例如,我不知道您打算对打印级别执行什么操作。@RainerJoswig PRINT-LEVEL(我将其重命名为PRINT-children)打印主节点的直接子节点。所有的问题都是先打印一棵树的宽度。没有lambdas它会是什么样子?我们的任务仅限于基本功能:car、cdr、cons、cond、for、print、list length、format、apply、atom、setq
CL-USER 76 > (breadth-first '(A (B (D (E)
(F)))
(C)
(K))
(lambda (node)
(princ (node-name node))
(princ ":")
(mapc (lambda (child)
(princ (node-name child)))
(node-children node))
(terpri)))
A:BCK
B:D
C:
K:
D:EF
E:
F: