1
假设我们有这样一个清单:[[[[a],b,c],a,b,[a,b]]]
递归列表的多个列表
我想递归下降列表中获取例如[[a],b,c]
或[a]
。
做这样的事情:listsplit([H|T], H, T).
当返回头时,我只能达到列表的一个级别。我试图递归地做,但无济于事。
任何帮助表示赞赏。
假设我们有这样一个清单:[[[[a],b,c],a,b,[a,b]]]
递归列表的多个列表
我想递归下降列表中获取例如[[a],b,c]
或[a]
。
做这样的事情:listsplit([H|T], H, T).
当返回头时,我只能达到列表的一个级别。我试图递归地做,但无济于事。
任何帮助表示赞赏。
您应该记住[H | T]只是语法糖:列表只是二叉树,头枝始终是叶。所以,你可以解构它就像任何其他的树:
| ?- X = [[[[a],b,c],a,b,[a,b]]], X = [[Y|_]|_], X = [[[Z|_]|_]|_].
这导致:
X = [[[[a],b,c],a,b,[a,b]]]
Y = [[a],b,c]
Z = [a]
但是,这种 “气味”。你究竟想要完成什么?也许有更好的方法,然后用笨拙的嵌套列表表示树?
我正在编写一个小解释器,我在prolog中创建一个符号表。我的输入结构就像这样['[function1],[[function2],[[function3]]]',我试图解构它,以便将参数存储在函数中(返回值,输入参数,功能体等)。一个函数的例子是:[[int,[add]],[(],[[int,[a]],[[,],[[int,[b]],[]]]], []],[=],[[[a],[]],[[+],[[b],[]]]]] – ari
这件事看起来并不像符号表。符号表本质上就像是一个大的散列,它将标识符映射到当前作用域中相应的语义构造。你在这里得到了各种各样的词汇垃圾,像逗号和括号。在语义分析之前至少有两个层次。尝试使用嵌套列表作为唯一的数据结构一次性进行lexing/parsing/semantic分析不会很有趣。我建议你更干净地分离这些步骤,并首先设计适当的数据结构。 –