#!/usr/bin/env python
# encoding=utf-8 (pep 0263)
from linked_lists import LinkedList, Nil
def member(x, ys):
if ys == Nil:
return False
if x == ys.head:
return True
return member(x, ys.tail)
# demonstracni vypis
if __name__ == "__main__":
print("Member - 3. varianta")
print("Vysledek volani member('a', LinkedList(['a', 'b', 'a'])) je %s." % \
member("a", LinkedList(["a", "b", "a"])))
Member - 3. varianta
Vysledek volani member('a', LinkedList(['a', 'b', 'a'])) je True.
| % nacteni:
/* ['2.1.3_3.pl']. */
% vymaz predchozi deklarace member
:- retractall(member/2).
:- dynamic member/2.
member(X,[Y|_]) :- X == Y.
member(X,[Y|T]) :- X \== Y, member(X,T).
% demonstracni vypis
% abychom se vyhli varovanim "Redefined static procedure ..."
:- dynamic
write_all_X/3,
start/0.
write_all_X(Goal,X,Name):-
call(Goal),write(' '),write(Name),write(' = '),write(X),nl,fail.
write_all_X(_,_,_).
start:-
write('Member - 3. varianta (efektivnejsi, taktez ne obousmerna)'),nl, nl,
write('Vysledek volani "member(a,[X,b,c])" je:'),nl,
write_all_X(member(a,[X,b,c]), X, 'X'),
write('No'), nl, nl,
write('Vysledek volani "member(a,[a,b,a]),write(ok),nl,fail"'), nl,
write(' (konci pri nalezeni 1. vyskytu "a") je:'),nl.
?-start.
?-member(a,[a,b,a]),write(ok),nl,fail.
:- retractall(write_all_X/3).
:- retractall(start/0).
/* member_demo(a,[a,b,a]),write(ok),nl, fail . */
% vrati:
% ok
% No
Member - 3. varianta (efektivnejsi, taktez ne obousmerna)
Vysledek volani "member(a,[X,b,c])" je:
No
Vysledek volani "member(a,[a,b,a]),write(ok),nl,fail"
(konci pri nalezeni 1. vyskytu "a") je:
ok
|