Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 为什么我的Pradicate my_flant/2没有展平嵌套列表结构?(序言)_List_Prolog_Flatten - Fatal编程技术网

List 为什么我的Pradicate my_flant/2没有展平嵌套列表结构?(序言)

List 为什么我的Pradicate my_flant/2没有展平嵌套列表结构?(序言),list,prolog,flatten,List,Prolog,Flatten,我写的谓词将一个简单的列表展平,比如list=[a,b,c,[d,e],f], 但不像列表2=[a,b,[[c,d],e],f]那样的列表。这是我的密码: my_flatten([], []). my_flatten([H|T], R):- not(is_list(H)), my_flatten(T, R1), append([H], R1, R). my_flatten([H|T], R):- is_list(H), my_flatten(T, R1), append(H, R1, R).

我写的谓词将一个简单的列表展平,比如list=[a,b,c,[d,e],f], 但不像列表2=[a,b,[[c,d],e],f]那样的列表。这是我的密码:

my_flatten([], []).
my_flatten([H|T], R):- not(is_list(H)), my_flatten(T, R1), append([H], R1,  R).
my_flatten([H|T], R):- is_list(H), my_flatten(T, R1), append(H, R1, R).
我的想法是检查头部是否是一个列表,并根据这个决定执行递归并将尾部附加到头部

我是否遗漏了重要的一点

我是否遗漏了重要的一点

当然可以。鲍里斯说得对,如果你自己去发现问题,你会学到更多。只是一个提示:当它是一个列表时,必须在头部递归,才能将其展平

在这之后(只需在最后一句的适当位置添加一个调用),您将得到

?- my_flatten([a,b,[[c,d],e],f], L).
L = [a, b, c, d, e, f] ;
false.

我寻找答案,但根据我的想法,我没有发现它真的有用。我认为append很有用,为什么不使用它呢。我认为当我必须使用或不使用某些东西时,这是离题讨论。顺便说一句,我有一个解决方案,但我认为在不理解为什么解决方案是正确的情况下看这个解决方案并没有真正的帮助。重要的是要理解为什么某些东西能工作或不能工作,所以我想问一下会有帮助。听:我正在使用一本教科书:William F Clocksin和Christopher S.Mellish:使用ISO标准在Prolog中编程。我认为假装我拒绝做我的工作是不公平的,因为我正在阅读,但也许第三章(数据结构)中有一些观点不是100%清楚。但是在你的假期里你能问谁呢?所以我正在努力学习每一件事。对你来说,仅仅因为你有知识,就很容易给出这样的评论。有时候你应该试着换个角度看问题,然后再装作不真实的样子发表评论。好的,谢谢你,我会试着继续。。。但是你能帮我把我的问题安排好吗?正如你发布的链接中所描述的,我试图用一种简短的方式解释这个问题,我格式化了代码并试图具体化。我也试着把问题贴在标题上。你能帮我告诉我还有什么可以改进的吗?如果你有线索,把它放在你的问题中,并指出确切的问题。询问问题的来源和解决方法。仅供参考:
append([H],R1,R)
[H | R1]=R
相同,这意味着你的第二个从句可以简化为:
my | plant([H | T],[H | R1]):-不是(is | list(H)),my | plant(T,R1)。
解决它:my | plant([H |,T],R]:-is | list(H),my |,R1),my | append(R1,R2,R)。它工作了!谢谢!