私はそれは完全に私の解決策ではありませんので、それだけで、コードが修正されており、私は今それがうまく働いていると思いますが、リンクからソリューションを少し変更:
mis(Tree, List, N) :-
mis_no_root(Tree, List1, N1),
mis_with_root(Tree, List2, N2),!,
max_set(List1, N1, List2, N2, List, N).
max_set(List1, N1, List2, N2, List, N) :-
(N1>N2,List=List1,N=N1;
N2>N1,List=List2,N=N2;
N2=:=N1,N=N1,(List=List1;List=List2)).
mis_no_root(nil, [], 0).
mis_no_root(t(L,_,R), List, N) :-
mis(L, LeftList, LeftN),
mis(R, RightList, RightN),
append(LeftList, RightList, List),
N is LeftN + RightN.
mis_with_root(nil, [], 0).
mis_with_root(t(L,Root,R), [Root|List], N) :-
mis_no_root(L, LeftList, LeftN),
mis_no_root(R, RightList, RightN),
append(LeftList, RightList, List),
N is LeftN + RightN + 1.
あなたが1つのリストを返したい場合あなたが書くことができるソリューション:
final_mis(Tree,List,N):-findall(L,mis(Tree, L,_),List),List=[H|_],length(H,N).
あなたがしようとしていること、あなたのコードと入力と予想される出力を例にして説明してください。 「類似」という言葉は、問題をはっきりさせません。 – coder
私はそれを更新しました。これがうまくいきたいです – Infested