[net.lang.prolog] some simple Prolog utilities...

taylor (05/08/83)

Relay-Version:version B 3/9/83; site harpo.UUCP
Message-ID:<175@sdcsvax.UUCP>
Date:Sat, 7-May-83 17:15:19 EDT

% 		Some Prolog Utilities
% 		Written by Dave Taylor

% push(Item) and pop(Item) allow you to use a FIFO stack.
% clear_stack clears the stack.  (always returns true)

clear_stack :- retract(stack(_)).
clear_stack.

push(Item) :-
	retract(stack(Stack)),
	assert(stack([Item, ..Stack])).
push(Item) :- assert(stack([Item])).

pop(Item) :-
	retract(stack([Item, ..Stack])),
	assert(stack(Stack)).
pop(_) :- print('nothing in stack to pop!!').

% get_last(List, Last) substantiates Last to be the last element in List.

get_last([Last], Last).
get_last([_, ..List], Last) :-
	get_last(List, Last).

% member_of(Atom, List) returns true iff Atom is contained within List.

member_of(Item, [Item, ..List]).
member_of(Item, [Head, ..List]) :- member_of(Item, List).

% share_member(List1, List2) returns true iff the intersection of the
% two lists is non-null.

share_member([Head, ..List1], List2) :-
	member_of(Head, List2).
share_member([Head, ..List1], List2) :- share_member(List1, List2).