Ich bin neu in Prolog, und ich denke, ich habe ein wirklich einfaches Problem zu lösen, aber ich kann nirgendwo Lösung finden.Prolog - finde alle Listen, die eine feste Länge haben
Also habe ich eine Liste von Listen und ich muss alle Elemente darin mit etablierter Länge finden.
Dies ist, was ich kam, aber es funktioniert nicht.
averegelist_([[]],[[]]).
averegelist_([Wo|List], Averege, NewL):-
length(Wo,N), N+1=:=Averege, averegelist_(List, NewL).
averegelist([Word|List1],Av, [Word|List2]):-
length(Word,N), N+1=\=Av, averegelist_(List1, Av, List2).
Was erwartet i somethig wie folgt aus:
?- averegelist([['a','b','c'],['f','g'],['h','m']],2, X)).
X = ['f','g'].
X = ['h','m'].
False
Kann mir jemand bitte helfen?
Edit:
Also, ich habe es geschafft! Für alle Interessierten in diesem Topik ist das, was mein Code wie folgt aussieht:
split_on_delimiter(L, D, S) :-
split_on_delimiter_(L, D, R),
findall(X, (member(X, R), length(X,Length), Length > 0), S).
split_on_delimiter_([], _, [[]]).
split_on_delimiter_([D|T], D, [[]|T2]) :-
split_on_delimiter_(T, D, T2).
split_on_delimiter_([H|T], D, [[H|T2]|T3]) :-
dif(H, D),
split_on_delimiter_(T, D, [T2|T3]).
my_length([],0).
my_length([_|L],N) :- my_length(L,N1), N is N1 + 1.
my_length_lol([], 0).
my_length_lol([H|L],N) :- my_length(H,Add), my_length_lol(L,N1), N is N1 + Add.
countAver(L,Av):- length(L,ListN), my_length_lol(L,AllN), Av is div(AllN,ListN).
test_condition(X, Con):- length(X, N), N =:= Con.
select_element_on_condition([X|Xs], X, Con) :-
test_condition(X, Con).
select_element_on_condition([_|Xs], X, Con) :-
select_element_on_condition(Xs, X, Con).
findAvWord(L, X):- split_on_delimiter(L,' ', Words), countAver(Words, AvWordLength),
write(AvWordLength), select_element_on_condition(Words, X, AvWordLength).
findAvWord (L, X) L - eine Liste von simbols ist, X - ein Wort von averege Länge in dieser Liste.
split_on_delimiter (L, D, S) S - Liste von Listen von L, bezogen auf Trennzeichen (‘ 'in meinem Fall)
Werfen Sie einen Blick auf diese letzten [Q & A] (http://stackoverflow.com/q/42737638 1243762). –