Prolog 递归列表的多个列表

Prolog 递归列表的多个列表,prolog,Prolog,假设我们有这样一个列表:[[a],b,c],a,b[a,b]] 我想在列表中递归,比如get[[a]、b、c]或[a] 这样做:listsplit[H | T],H,T。当返回head时,我只得到列表的一个级别。我试着反复做,但没用 感谢您的帮助 您应该记住,[H | T]只是语法上的糖:列表只是二叉树,其头分支始终是一片叶子。所以你可以像其他树一样解构它: | ?- X = [[[[a],b,c],a,b,[a,b]]], X = [[Y|_]|_], X = [[[Z|_]|_]|_].

假设我们有这样一个列表:[[a],b,c],a,b[a,b]]

我想在列表中递归,比如get[[a]、b、c]或[a]

这样做:listsplit[H | T],H,T。当返回head时,我只得到列表的一个级别。我试着反复做,但没用


感谢您的帮助

您应该记住,[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]]、[]]]]]、[[+]]]]]这个东西看起来根本不像符号表。符号表本质上类似于一个大散列,它将标识符映射到当前作用域中相应的语义结构。这里有各种各样的词汇垃圾,比如逗号和括号。在语义分析之前至少有两个级别。试着制作lexi使用嵌套列表作为唯一的数据结构立即进行ng/解析/语义分析将不是很有趣。我建议您更清晰地分离这些步骤,并首先设计适当的数据结构。