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

时间:2014-08-27 06:51:59

标签: list prolog flatten

我写的谓词展平了一个简单的列表,如List = [a,b,c,[d,e],f], 但不是像List2 = [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).

我的想法是检查头部是否是列表,并根据此决定进行递归并将尾部附加到头部。

我错过了一个重点吗?

1 个答案:

答案 0 :(得分:1)

  

我错过了一个重点吗?

是的,当然。鲍里斯是对的,如果你试图自己找到问题,你会学到更多。只是一个提示:当它成为一个列表时,你必须在头上递归才能使它变平。

之后(只需在最后一句中的适当位置添加一个电话),你就会得到

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