我写的谓词展平了一个简单的列表,如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).
我的想法是检查头部是否是列表,并根据此决定进行递归并将尾部附加到头部。
我错过了一个重点吗?
答案 0 :(得分:1)
我错过了一个重点吗?
是的,当然。鲍里斯是对的,如果你试图自己找到问题,你会学到更多。只是一个提示:当它成为一个列表时,你必须在头上递归才能使它变平。
之后(只需在最后一句中的适当位置添加一个电话),你就会得到
?- my_flatten([a,b,[[c,d],e],f], L).
L = [a, b, c, d, e, f] ;
false.