gpt4 book ai didi

algorithm - 在递归通过分支时跟踪路径(更多信息在描述中)- 使用 Tcl

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:30 25 4
gpt4 key购买 nike

背景:

  • 用 Tcl 编写脚本
  • 使用名为 IDSBatch 的工具运行脚本来自 linux (centos) 终端

我有一个包含 block 、组和寄存器的系统(.rdl 文件)。

block 可以包含其他 block 、组或寄存器。而组只能有寄存器和寄存器独立。

我遇到的问题是我想打印出每个寄存器的“地址”,即与该特定寄存器关联的 block 、组和寄存器的名称。例如:

               ______Block (a)______
| |
Block (b) reg(bob)
| |
group(tall) group(short)
| | |
reg(bill) reg(bobby) reg(burt)

最后的输出应该是这样的:

reg one: a.bob

reg 2:a.b.tall.bill

第三项:a.b.tall.bobby

第四项:a.b.short.burt

真正的问题来自 block 可以包含 block 的事实。所以系统不会总是一到三个级别(一个级别是 Block--reg,两个级别是 Block--Block--reg 或 Block ---group---reg 等等......)

我倾向于某种递归解决方案,我会访问元素说一个 block 并获取它的所有子元素(组、 block 和 regs)然后我会使用相同的函数来访问它的子元素(除非它是登记)。通过这种方式,它可以处理任何组合 block 组和寄存器,但后来我陷入了如何跟踪特定寄存器地址的困境。

感谢您花时间阅读本文,如有任何意见或建议,我们将不胜感激。

最佳答案

您可以使用列表来做到这一点。

从一个空列表开始,您将所有地址部分附加到它。如果遇到寄存器,则可以构建从前到后的路径。在每一级递归之后,您删除最后一个元素以摆脱您处理的部分。

示例:您刚刚看到收银机bill。然后,您的列表是 a -> b ->tall。要获取地址,您需要遍历列表并将节点连接在一起,然后将 bill 附加到结果字符串。

所以,你的递归函数有点像

  • 如果当前处理的元素是寄存器:重构路径。
  • 如果当前处理的元素不是寄存器:将路径元素追加到列表中,使用该列表调用函数并删除该列表的最后一个元素。

关于algorithm - 在递归通过分支时跟踪路径(更多信息在描述中)- 使用 Tcl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24704660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com