Keresés listákban (a select/3 és member/2 eljárások)

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 21:09-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologElm8}} * fejezetek: 3.5.3 * fóliák: I.126-128 Egy listában azt jelenti a keresés, hogy meg tudjuk mondani: egy adott elem benne va…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


  • fejezetek: 3.5.3
  • fóliák: I.126-128

Egy listában azt jelenti a keresés, hogy meg tudjuk mondani: egy adott elem benne van-e a listában. A member/2 eljárás van a segítségünkre. member(Elem, Lista): igaz, ha Elem Listában van.

member(Elem, [Elem|_]).
member(Elem, [_|Farok]) :-
	member(Elem, Farok).

Tehát Elem tagja a listának, ha a feje, vagy szerepel a farkában.
A member felhasználási lehetőségei:

  • eldöntendő kérdés: egy egy bizonyos elem szerepel-e a listában
  • egy lista eleminek felsorolása
  • listák közös eleminek felsorolása (metszet):
	  | ?- member(X, [1,2,3]), member(X, [5,4,3,2,3]).
	  
  • egy értéket egy nyílt végű lista elemévé tesz, végtelen választás!

select(Elem, Lista, Marad): egy listából kivesz egy elemet. Marad az Elem kivételével kapott lista.

select(Elem, [Elem|Marad], Marad).
select(Elem, [X|Lista], [X|MaradF]) :-
	select(Elem, Lista, MaradF).

Ha az első elemet akarjuk elhagyni, akkor az első klóz dolgozik, ha nem az elsőt, akkor azt változatlanul hagyjuk, és a lista farkára hívjuk meg a selectet.