Stáhnout: 2.1.3_3.py   Zobrazit: jednoduše   2.1.3_3.pl

#!/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"])))

% 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

 Stáhnout: 2.1.3_3.py   Zobrazit: jednoduše   2.1.3_3.pl