prolog sprawdzanie czy jest w liscie

0

Mam program który wygląda tak:

szukaj([X|B],X).
szukaj([A|B],X):-szukaj(B,X).

i wyszukuje on dowolny element w liście muszę go przerobić na taki żeby każdy element listy był 3 elementową listą i wyszukać w niej dowolną wartość.

ma być tak że jak wpisze szukaj(a,b,c],[d,e,f,e). wyskoczy true, a jak inną literkę np. z dam to wyskoczy false. Nie wiem jak to przerobić może ktoś pomóc. Pewnie to banalnie proste ale ja ciemny z tego jestem.

0

Mam program który wygląda tak:

szukaj([X|B],X).
szukaj([A|B],X):-szukaj(B,X).

i wyszukuje on dowolny element w liście muszę go przerobić na taki żeby każdy element listy był 3 elementową listą i wyszukać w niej dowolną wartość.

ma być tak że jak wpisze

szukaj([[a,b,c],[d,e,f,]]e).

wyskoczy true, a jak inną literkę np. z dam to wyskoczy false. Nie wiem jak to przerobić może ktoś pomóc. Pewnie to banalnie proste ale ja ciemny z tego jestem.

0

Hmm, chodzi o to że jeśli którakolwiek z tych zagnieżdżonych list zawiera 'e' to predykat działa?

Wersja ogólniejsza niż potrzebujesz (sprawdza bardziej drzewo niż tylko listę trójelementowych list - btw. bardziej by krotki pasowały jeśli zawsze mają być trzy elementy):

contains1(Elem, Elem).
contains1([Head | _], Elem) :- contains1(Head, Elem), !.
contains1([_ | Rest], Elem) :- contains1(Rest, Elem).

Jeśli nie podoba ci się ta ogólność, można to napisać tak (zadziała wtedy tylko dla tych trzyelementowych list) - zamienić dwie pierwsze linie na:

contains1([[A, B, C] | _], Elem) :- member(Elem, [A, B, C]), !.

Unit testy:

:- begin_tests(contains).
% dla wersji podstawowej
test(contains1) :- contains1([[a, b, c]], b).
test(contains1) :- contains1([[a, b, c], [d, e, f]], e).
test(contains1) :- \+ contains1([[a, b, c], [d, e, f]], z).

% wersja rozszerzona:
test(contains1) :- contains1(e, e).
test(contains1) :- contains1([a, b, c, d, e], e).
test(contains1) :- contains1([[a, b, c, d, e]], e).
test(contains1) :- contains1([[a, [b, c], d], e], c).
:- end_tests(contains).
0

dzięki pomogłeś ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1