尝试解决练习 07http://www.ic.unicamp.br/~meidanis/courses/mc336/2009s2/prolog/problemas/ http://www.ic.unicamp.br/~meidanis/courses/mc336/2009s2/prolog/problemas/
我从一个迭代开始,如下所示
my_flatten1([], []).
my_flatten1([[A|T]|U], [A|V]) :-
append(T, U1, V),
my_flatten1(U, U1).
my_flatten1([A|T], [A|U]) :-
not(is_list(A)),
my_flatten1(T, U).
is_flat(A) :-
my_flatten1(A, A).
它似乎适用于以下一组查询
my_flatten1([a, [b, [c, d], e]], X).
my_flatten1(X, [a, b, c]).
my_flatten1(X, [a|T]).
my_flatten1(X, [a, b, A]).
my_flatten1([a, X], M).
my_flatten1([a|X], M).
is_flat([a|X]).
is_flat([a,[c]|X]).
is_flat([F,[c]|X]).
my_flatten1(A, B).
my_flatten1([A], B).
my_flatten1([[A]], B).
my_flatten1([[a|A]], B).
my_flatten1([a|A], B).
my_flatten1([X|B], [1,2,3,4]).
my_flatten1([[a,c|D]|X], [a|B]).
但是我没有成功构建my_flatten
基于my_flatten1
。总会有一些查询失败或最终陷入无限循环,或者只产生一个最明显的结果。
编辑以澄清我的目的,例如我可以打电话my_flatten1
使用变量作为第一个参数来分配括号:
?- my_flatten1(X, [a, b]).
X = [[a], [b]] ;
X = [[a], b] ;
X = [[a, b]] ;
X = [a, [b]] ;
X = [a, b].