所以我在java中使用Linked List没有多少经验,我得到了这个需要在链表上存储值的赋值。总之是创建处理Lisp表达式的类。特别是,它从表达式创建基于引用的链接列表,并实现许多方法来对列表执行操作。正如我的教授所提供的那样,他使用标记器来打破表达。例如:
parse("(+ 3 5 ( 23.2 -1a 1/2 \"abc\" ) ) ");
我的任务是将它添加到一个简单的链表中,但我的问题是,对于每个打开的括号,都有一个新的列表,其中的括号是一个子列表。
对于案件:(4 *(45 + 3) - (7/5))
(45 + 3)是子列表或列表。
(7/5)是子列表或列表
4是整数
*符号
45整数
+符号
3整数
- 符号
7/5比率
我的教授告诉我:“因此,子列表或列表必须与完整列表相同,这意味着识别器进程可以递归。”
我有一个Lisp泛型类,一个LinkedList类,以及一个用于将表达式分解为标记的类。
有什么想法吗?
答案 0 :(得分:1)
我认为你想要的是Composite Pattern实现。如果您有两种类型需要同样处理,则可以复合。解析器通常具有节点和叶类,或复合和终端表达式。如果您同时实现了相同的接口,则可以轻松创建描述解析过程的列表,因为列表中的每个节点都可以是其他节点的集合。所以你的直觉是正确的,你正在处理一棵树。看起来像列表的树通常是复合树。