1 Logic Programming. 2 A little bit of Prolog Objects and relations between objects Facts and rules. Upper case are variables. parent(pam, bob).parent(tom,bob).

Slides:



Advertisements
Similar presentations
Artificial Intelligence: Natural Language and Prolog
Advertisements

Logic Programming Lecture 1: Getting started. Getting started We’ll use SICStus Prolog Free for UofE students Available on all DICE machines
Prolog.1 Prolog. Prolog.2 Textbook and Software  Title PROLOG programming for artificial intelligence  Author Ivan Bratko  Get the software – windows.
Chapter 11 :: Logic Languages
1. An Overview of Prolog.
Prolog The language of logic. History Kowalski: late 60’s Logician who showed logical proof can support computation. Colmerauer: early 70’s Developed.
1 Part 1 The Prolog Language Chapter 2 Syntax and Meaning of Prolog programs.
Prolog.
Declarative Programming Lists in PROLOG Autumn 2014.
Logic Programming – Part 2 Lists Backtracking Optimization (via the cut operator) Meta-Circular Interpreters.
LING 388: Language and Computers Sandiway Fong Lecture 5: 9/5.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
11/10/04 AIPP Lecture 6: Built-in Predicates1 Combining Lists & Built-in Predicates Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture.
COMMONWEALTH OF AUSTRALIA Copyright Regulations 1969 WARNING This material has been reproduced and communicated to you by or on behalf of Monash University.
1 Introduction to Prolog References: – – Bratko, I., Prolog Programming.
INTRODUCTION TO PROLOG. PROLOG BASICS Atoms - most primitive terms that the language manipulates start with lower case letter includes strings (‘inside.
1 COMP313A Programming Languages Logic Programming (3)
Prolog Programming for Artificial Intelligence Three edition 2001
About prolog  History  Symbolic Programming Language  Logic Programming Language  Declarative Programming Language.
4. PROLOG Data Objects And PROLOG Arithmetic
CS 330 Programming Languages 12 / 02 / 2008 Instructor: Michael Eckmann.
For Friday Read “lectures” 1-5 of Learn Prolog Now: prolog-now/
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Controlling Backtracking Notes for Ch.5 of Bratko For CSCE 580 Sp03 Marco Valtorta.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Syntax and Meaning of Prolog Programs Notes for Ch.2 of Bratko For CSCE 580.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 15 Logic Programming Q: How many legs does.
(9.1) COEN Logic Programming  Logic programming and predicate calculus  Prolog statements  Facts and rules  Matching  Subgoals and backtracking.
ISBN Chapter 16 Logic Programming Languages.
Logic Programming Languages
1 COMP 205 Introduction to Prolog Dr. Chunbo Chu Week 13 Slides Courtesy to: Peter LO.
Formal Models of Computation Part II The Logic Model
FATIH UNIVERSITY Department of Computer Engineering Controlling Backtracking Notes for Ch.5 of Bratko For CENG 421 Fall03.
CS 321 Programming Languages and Compilers Prolog part 2.
COP4020 Programming Languages Logical programming with Prolog Prof. Xin Yuan.
Chapter 16 Logic Programming Languages. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 16 Topics Introduction A Brief Introduction to.
14/10/04 AIPP Lecture 7: The Cut1 Controlling Backtracking: The Cut Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 7 14/10/04.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
For Wednesday Read “lectures” 7-10 of Learn Prolog Now Chapter 9, exs 4 and 6. –6 must be in Horn clause form Prolog Handout 2.
Introduction To PROLOG World view of imperative languages. World view of relational languages. A PROLOG program. Running a PROLOG program. A PROLOG.
1 COMP 205 Introduction to Prolog Dr. Chunbo Chu Week 14.
1 Prolog and Logic Languages Aaron Bloomfield CS 415 Fall 2005.
PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia.
Dr. Muhammed Al-Mulhem ICS An Introduction to Logical Programming.
Logic Programming Languages Session 13 Course : T Programming Language Concept Year : February 2011.
Logic Programming and Prolog Goal: use formalism of first-order logic Output described by logical formula (theorem) Input described by set of formulae.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
For Monday Read “lectures” 1-5 of Learn Prolog Now: prolog-now/
Introduction to Prolog. Outline What is Prolog? Prolog basics Prolog Demo Syntax: –Atoms and Variables –Complex Terms –Facts & Queries –Rules Examples.
CS 337 Programming Languages Logic Programming I (Logic, Intro to Prolog)
© Kenneth C. Louden, Chapter 12 - Logic Programming Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
Programming Languages Third Edition Chapter 4 Logic Programming.
CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
Programming Language Concepts Lecture 17 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Logic Programming.
Artificial Intelligence CS370D
1-1 An Introduction to Logical Programming Sept
For Friday No reading Prolog Handout 2. Homework.
Prolog 3 Tests and Backtracking 1. Arithmetic Operators Operators for arithmetic and value comparisons are built-in to Prolog = always accessible / don’t.
07/10/04 AIPP Lecture 5: List Processing1 List Processing Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 5 07/10/04.
For Wednesday No reading Prolog handout 2 Chapter 9, exercise 4.
Prolog Fundamentals. 2 Review Last Lecture A Prolog program consists of a database of facts and rules, and queries (questions). –Fact:.... –Rule:... :-....
Logic Programming Logic programming Candidates should be familiar with the concept of logic programming for declaring logical relationships.
Section 16.5, 16.6 plus other references
For Friday No reading Prolog handout 3 Chapter 9, exercises 9-11.
For Wednesday Read “lectures” 7-10 of Learn Prolog Now:
Prolog programming Introduction to Prolog (part2)
Logic Programming Languages
Prolog programming Introduction to Prolog (part3)
Chapter Two: Syntax and Meaning of Prolog Programs
Logic Programming Language
Programming Techniques
PROLOG.
Presentation transcript:

1 Logic Programming

2 A little bit of Prolog Objects and relations between objects Facts and rules. Upper case are variables. parent(pam, bob).parent(tom,bob). parent(tom, liz).parent(bob, ann). parent(bob, pat).parent(pat, jim). ? parent(bob, pat). ? parent(bob, liz). ? parent(bob, ben). ? parent(bob, X). ? parent(X, Y). We use parent(x,y) to mean x is a parent of y. But to the computer it is just a relation, which could mean: y is a parent of x y is a parent of x x and y are parents of children x and y are parents of children “x y” wrote a book on parenting “x y” wrote a book on parenting x and y are related in some way x and y are related in some way

3 Prolog grandparent (X,Y) :- parent(X, Z), parent(Z, Y). For all X and Y Upper case means a variable X is the grandparent of Y if X is a parent of Z and Z is a parent of Y sister (X,Y) :- parent(Z, X), parent(Z, Y), female(X). For all X and Y X is the sister of Y if Z is the parent of both X and Y and X is a female Try writing cousin Try writing ancestor

Horn Clauses u :- p, q, …, t. can be written as (pΛqΛ … Λt)  u Written as a Horn clause: !p V !q ! … !t V u Either u is true or one of the 4

5 Clause A clause is either –a single predicate called a fact –a rule of the form condition  conclusion condition  conclusion Conclusion is a single predicate Condition is a conjunction of predicates a 1  a 2  a 3 …  a n Note: prolog write it backwards grandparent (X,Y) :- parent(X, Z), parent(Z, Y). parent(X,Z)  parent(Z,Y)  grandparent(X,Y)

6 Horn Clauses Horn clauses don’t have any quantifiers Assumes that the variables in the head are universally quantified and the variables in the body are existentially quantified (if they don’t appear in the head)

7 Horn Clauses grandparent(X,Y)  parent(X,Z)  parent(Z,Y) grandparent(X,Y)  parent(X,Z),parent(Z,Y) Equivalent to  z parent(X,Z)  parent(Z,Y)  grandparent(X,Y)  x :  y :  z parent(X,Z)  parent(Z,Y)  grandparent(X,Y)

Trace It forces Prolog to evaluate queries one step at a time, indicating what it is doing at each step. Debugging tool – but helps in understanding 8

Example my_last(X,[X]). my_last(X,[_|L]) :- my_last(X,L). trace. my_last(X,[1,2,3,4,5]). Yes [trace] 1 ?- my_last(X,[1,2,3,4,5]). Call: (7) my_last(_G516, [1, 2, 3, 4, 5]) ? creep Call: (8) my_last(_G516, [2, 3, 4, 5]) ? creep Call: (9) my_last(_G516, [3, 4, 5]) ? creep Call: (10) my_last(_G516, [4, 5]) ? creep Call: (11) my_last(_G516, [5]) ? creep Exit: (11) my_last(5, [5]) ? creep Exit: (10) my_last(5, [4, 5]) ? creep Exit: (9) my_last(5, [3, 4, 5]) ? creep Exit: (8) my_last(5, [2, 3, 4, 5]) ? creep Exit: (7) my_last(5, [1, 2, 3, 4, 5]) ? creep 9

Example f(a). f(b). g(a). g(b). h(b). k(X) :- f(X),g(X),h(X). 2 ?- trace. What will happen? 10

Example f(a). f(b). g(a). g(b). h(b). k(X) :- f(X),g(X),h(X). 2 ?- trace. [trace] 2 ?- k(X). Call: (8) k(_G396) ? creep Call: (9) f(_G396) ? creep Exit: (9) f(a) ? creep Call: (9) g(a) ? creep Exit: (9) g(a) ? creep Call: (9) h(a) ? creep Fail: (9) h(a) ? creep Redo: (9) f(_G396) ? creep Exit: (9) f(b) ? creep Call: (9) g(b) ? creep Exit: (9) g(b) ? creep Call: (9) h(b) ? creep Exit: (9) h(b) ? creep Exit: (8) k(b) ? creep X = b 11

12 Some more prolog Recursive rules example predecessor relation predecessor(X,Z) :- parent(X,Z). X is a predecessor of Z if X is a parent of Z predecessor(X,Z) :- parent(X,Y), parent(Y,Z) And so on… predecessor(X,Z) :- parent(X,Y), predecessor(Y,Z).

Questions 1.How do we get an “or” in Prolog? 2.When a variable is instantiated to a value (temporarily bound), we call that ____________? 3.Describe (using technical terms) the procedure Prolog uses to answer queries. 13

14 A prolog program comprises clauses - facts, rules and queries PROGRAM big(bear).%fact1 big(elephant).%fact 2 small(cat).%fact 3 brown(bear).% fact 4 black(cat).% fact 5 grey(elephant).%c fact 6 dark(Z) :- black(Z).%rule7 dark(Z) :- brown(Z).%rule 8 ?dark(X), big(X). Query (from the prompt)

15 Data Objects Atoms versus numbers versus Variables Atoms –strings of letters, digits, and the underscore character beginning with a lower case letter –some strings of special characters –can enclose strings of characters in single quotes e.g. ‘Fred’ Numbers –integers and floats

16 Data Objects Atoms versus Variables Variables are strings of characters, digits and underscores that begin with an uppercase letter or an underscore Can use the anonymous underscore hasachild(X) :- parent(X,Y) hasachild(X) :- parent(X,_) Wants singletons to be _ ? parent(X, _)

17 Data Objects Structured objects objects that have several components location(X, Y, Orientation). location(156, 786, 25). location(156, 786, Orientation). location is the functor (function object –maintains state between calls in backtracking)

18 data objects simple objects structures constantsvariables atomsnumbers These are all terms

19 Operations on lists Membership The member relation member(X,L) ? member(d, [a, b, h, d]). ? ? member(d, [a,b,[d h], e]). ? ?member([d, h], [a, [d,h], e f]). ? Try writing member

20 Membership X is a member of L if –X is the head of L, or –X is a member of the tail of L. member(X, [X|Tail]). member(X, [Head | Tail]) :- member(X,Tail). Note two separate clauses

21 More Involved Membership X is a member of L if –X is the head of L, or –X is a member of the tail of L, or –X is a member of a sublist of L member(X,[X|Tail]). member(X,[_|Tail]) :- member(X,Tail). member(X,[L|Tail]) :- member(X,L).

At seats Write the append function append([2,3,4], [1,4], [2,3,4,1,4]). 22

23 More bits and pieces Comparison operators (testing, just succeeds or fails, unlike unification where changes occur to instantiation) –X > Y –X < Y –X >= Y –X =< Y % unexpected order –X =:= YTrue if equal =:= –X =\= Y True if values are not equal Unification –X = Y –X \= Y Not identical X\==Y

Append Notice there is no concept of input/output append([],X,X). append([X|Y],R,[X|T]) :- append(Y,R,T). append2([],L,L). append2([X|Xs],Y,R) :- append2(Xs,Y,R1), R = [X|R1] ?append([1,2,3], Y, [1,2,3,4,5]). Y = [4, 5] 24

1 ?- append(X,Y,[1,2,3,4,5]). X = [] Y = [1, 2, 3, 4, 5] ; X = [1] Y = [2, 3, 4, 5] ; X = [1, 2] Y = [3, 4, 5] ; X = [1, 2, 3] Y = [4, 5] ; X = [1, 2, 3, 4] Y = [5] X = [1, 2, 3, 4, 5] Y = [] ; No 25

Cut ! Automatic backtracking is one of the most characteristic features of Prolog. But backtracking can lead to inefficiency. If Prolog finds a cut in a rule, it will not backtrack on the choices it has made. If it has chosen q for the variable X and encounters a cut, Prolog will consider q the only option for X, even if there are other possibilities in the database. 26

merge([], List, List). merge(List, [], List). merge([H1|T1], [H2|T2], [H1|T3]) :- H1 =< H2, merge(T1, [H2|T2], T3). merge(List1, [H2|T2], [H2|T3]) :- merge(List1, T2, T3). 27

Why does this happen merge([1,3,4,5,7], [2,6],X). X = [1, 2, 3, 4, 5, 6, 7] ; X = [1, 2, 3, 4, 6, 5, 7] ; X = [1, 2, 3, 6, 4, 5, 7] ; X = [1, 2, 6, 3, 4, 5, 7] ; X = [2, 1, 3, 4, 5, 6, 7] ; X = [2, 1, 3, 4, 6, 5, 7] ; X = [2, 1, 3, 6, 4, 5, 7] ; X = [2, 1, 6, 3, 4, 5, 7] 28

Better as merge([], List, List) :- !. merge(List, [], List):- !. merge([H1|T1], [H2|T2], [H1|T3]) :- H1 =< H2, !, merge(T1, [H2|T2], T3). merge(List1, [H2|T2], [H2|T3]) :- merge(List1, T2, T3). 29

30 Structures date(X,Y,Z). date(20, june, 2005). date(Day, june, 2005). date(Day, Month, Year) :- Day > 0, Day <= 31,……. classTime(cs4700, 1200,th). classTime(cs6100, 0900,th). classTime(cs1410,0930,mwf)

Examples Or, we could have nested structures. class(cs4700, time(th, 12:00, 13:15), instructor(allan, vicki), location(bus, 345) ). class(cs1400, time(mwf,8:30, 9:20), instructor(duhadway, linda), location(main, 155)). class(cs1400, time(mwf, 10:30, 11:20), instructor(mathias, dean), location(main, 115)). class(cs1400, time(mwf, 11:30, 12:20), instructor(duhadway, linda), location(main, 115)). class(cs1400, time(mwf, 13:30, 13:20), instructor(duhadway, linda), location(main, 155)). class(cs2420, time(mwf, 10:30, 11:20), instructor(smith, john), location(main, 225)). class(cs2420, time(th, 9:30, 11:20), instructor(smith, john), location(geol, 105)). class(C,T,I,L) – accesses the four pieces of the structure. How do we find when cs4700 starts? 31

Examples class(cs4700, time(th, 12:00, 13:15), instructor(allan, vicki), location(bus, 345) ). class(cs1400, time(mwf,8:30, 9:20), instructor(duhadway, linda), location(main, 155)). class(cs1400, time(mwf, 10:30, 11:20), instructor(mathias, dean), location(main, 115)). class(cs1400, time(mwf, 11:30, 12:20), instructor(duhadway, linda), location(main, 115)). class(cs1400, time(mwf, 13:30, 13:20), instructor(duhadway, linda), location(main, 155)). class(cs2420, time(mwf, 10:30, 11:20), instructor(smith, john), location(main, 225)). class(cs2420, time(th, 9:30, 11:20), instructor(smith, john), location(geol, 105)). How do we find when cs4700 starts? Called a selector start_time(ClassID,T) :- class(ClassID, time(_,T, _), _, _). 32

Examples One way of generating a list is by asking Prolog to find all the solutions to a goal using the built-in findall/3. To create a list of all the times in the class database (instead of asking for them one at a time), we could do this: findall(T,start_time(C,T),Times). The query findall(Object,Goal,List). produces a list List of all the objects Object that satisfy the goal Goal 33

34 Unification Matching clauses with variables Have to find the appropriate substitutions for variables so that the clauses match Process is called unification –Process by which variables are instantiated

35 Unification in Prolog… A variable that is uninstantiated unifies with anything and becomes instantiated with “anything” = causes two things to be unified ? me = X. X = me ? f(a,X) = f(Y, b). X = b Y = a ?f(a,X) = f(x,Y) No ?f(a,Y) = f(a,B). Y=_G279 B-_G279

36 Unification in Prolog A structured term (predicate or function applied to arguments requires –Same predicate/function name –Same number of arguments –Arguments can be unified recursively ? f(X) = g(X) - can’t match ? f(X) = f(a,b) - can’t match ? f(a, g(X)) = f(Y, b) - can’t match ? f(a, g(X)) = f(Y, g(b)) = Y=a, X = b

37 Unification examples Unify the following : p(X,Y) = p(a, Z) p(X,X) = p(a,b) ancestor(X,Y) = ancestor(bill, W) p(X,a,Y) = p(Z,Z,b) p(Marcus, g(X,Y)) = p(X, g(Caesar, Marcus)) g(X, X) = g(f(X), f(X))

38 Unification examples (answers) Unify the following : p(X,Y) =p(a, Z) X=a, Y and Z are the same p(X,X) = p(a,b) Can’t unify ancestor(X,Y) = ancestor(bill, W) X=bill, Y/W the same p(X,a,Y) = p(Z,Z,b) X and Z are the same, Z=a, so X=a, Y=b p(Marcus, g(X,Y)) = p(X, g(Caesar, Marcus)) Marcus and X are the same, X = Caesar, so Marcus=Caesar= Y g(X, X) =g(f(X), f(X)) X=f(X) a problem as is recursive

39 Adding and deleting How do you add an item to a list? Deleting an item from a list – del(X, L, Result) 1.If X is the head of L – result is the tail of L 2.If X is contained in the tail of L then concatenate the head of L onto the del of X from the tail of L 3.If you try to delete X from an empty list, return an empty list. Try to write the delete function at your seats del(4,[2,3,5,4,3,6], [2,3,5,3,6]).

40 Deleting… del(X,[],[]). % unless we wanted it to fail if no X del(X, [X|Tail], Tail]). del(X, [Y|Tail], [Y|Tail2]) :- del(X, Tail, Tail2) Deletes one occurrence from the list What happens when: del(a, [a, b, a, a], X). What if we changed it to delall(X,[],[]). delall(X,[X|Tail],Tail2) :- delall(X,Tail, Tail2). delall(X,[Y|Tail],[Y|Tail2]) :- delall(X,Tail, Tail2),X=\=Y. (not equal – important if we attempt to use “;” to get more solutions)

41 Relations/Terms/Queries An important note You can define different relations with the same name but with different numbers of arguments e.g. member/1, member/2, member/3 Wrong number of arguments - you will get an error message arity: number of arguments if there is such a relation predefined, you hide the predefined relation.

Remove the K'th element from a list. Example: ?- remove_at(2,[a,b,c,d],X,R). X = b R = [a,c,d] 42

Remove the K'th element from a list (answer) Example: ?- remove_at(2,[a,b,c,d],X,R). X = b R = [a,c,d] remove_at(1,[H|T],H,T). remove_at(N,[H|T],X,[H|R]) :- N1 is N - 1, remove_at(N1,T,X,R). 43

44 Define two predicates evenlength(List) and oddlength(List) so that they are true if their argument is a list of even or odd length respectively. For example ? evenlength([a,b,c,d]) ? yes Can use f ([X,Y|R]) to look at first two items by name. ?oddlength([c, d, e]) ?yes { At seats

Answers evenlength(L) :- length(L,Ct), 0 is Ct mod 2. or evenlength([]). evenlength([X,Y|R]) :- evenlength(R). 45

Reading Code: What do the following do? quest1 ([], 0). quest1([_|T], L) :- quest1(T, L1), L is L quest2(1,[F|_], F). quest2(N,[F|R],Which) :- N2 is N-1, quest2(N2,R,Which). 46

Reading Code quest3([]). quest3([_]). quest3([H1,H2|Rest]) :- H1 =< H2, quest3([H2|Rest]). quest4(Item, [], [Item]) :- !. quest4(Item, [H|T], [Item,H|T]):- Item =< H, !. quest4(Item, [H|T], [H|T1]) :- quest4 (Item, T, T1). 47

Sieve of EratosthenesSieve of Eratosthenes primes( Limit, Ps ) :- integers( 2, Limit, Is ), sift( Is, Ps ). integers( Low, High, [Low|Rest] ) :- Low =< High, !, M is Low+1, integers(M, High, Rest ). integers( _,_,[] ). sift( [], [] ). sift( [I|Is], [I|Ps]) :- remove(I,Is,New), sift( New, Ps ). remove(P,[],[]). remove(P,[I|Is],Nis) :- 0 is I mod P,!, remove(P, Is, Nis). remove(P,[I|Is],[I|Nis]) :- remove(P, Is, Nis). 48

Translation translate( [], [] ). translate( [H|T], [X|Y] ) :- change( H, X ), translate( T, Y ). change( you, i ). change( are, [am, not ] ). change( french, german ). change( do, did). change( X, X ). What is the output ?- alter([you,are,a, french,computer],F). 49

Ask ?- translate([you,are,a, french,computer],F). F = [i, [am, not], a, german, computer] ; F = [i, [am, not], a, french, computer] ; F = [i, are, a, german, computer] ; F = [i, are, a, french, computer] ; F = [you, [am, not], a, german, computer] ; F = [you, [am, not], a, french, computer] ; F = [you, are, a, german, computer] ; F = [you, are, a, french, computer]. 50

Try this problem 1 Write the code to give a specific fibonacci number: (1,1,2,3,5,8,13…) fib(6,X). x = 8 51

Try these Problems Write the code to give a specific fibonacci number: (1,1,2,3,5,8,13…) fib(6,X). x = 8 fib(X, Y):- X > 1, X1 is X - 1, X2 is X - 2, fib(X1, Z), fib(X2, W), Y is W + Z. 52

Try this problem 2 Write the code to reverse a list reverse([3,4,5],X). X = [5,4,3] 53

Try this problem 2 Write the code to reverse a list reverse([3,4,5],X). X = [5,4,3] reverse([X], [X]). reverse([H|T], R):- reverse(T, X), append(X, [H], R ). 54

Try this problem 3 Write the code to compute factorial: factorial(5,X). X=120 55

Try this problem 3 Write the code to compute factorial: factorial(5,X). X=120 factorial(0,1). factorial(N,F) :- N1 is N-1, factorial(N1,F1), F is N*F1. 56

Try this problem 4 Write the code to remove multiple copies from a list. make_set([1,3,5,2,2,4,1,2,6,3],X). X=[5,4,1,2,6,3] 57

Try this problem 4 Write the code to remove multiple copies from a list. make_set([1,3,5,2,2,4,1,2,6,3],X). X=[5,4,1,2,6,3] make_set([],[]). make_set([X|Y],Y2) :- member(X,Y), !, make_set(Y,Y2). make_set([X|Y],[X|Y2]) :- make_set(Y,Y2). 58

Try this problem 5 Write the code to perform set difference: remove any elements of the second list from the first list. difference([1,3,7,4], [5,3,4,2], X). X=[1,7] 59

Try this problem 5 Write the code to remove any elements of the second list from the first list. difference([1,3,7,4], [5,3,4,2], X). X=[1,7] difference([],Y,[]). difference([X|R],Y,Z) :- member(X,Y),!,difference(R,Y,Z). difference([X|R],Y,[X|Z]) :- difference(R,Y,Z). 60

Try this problem 6 Write the code to union two lists, but not include duplicates from the two lists. union([1,3,5,6], [1,4,6,8],X). X=[1,3,5,6,4,8] 61

Try this problem 6 Write the code to union two lists, but not include duplicates from the two lists. union([1,3,5,6], [1,4,6,8],X). X=[1,3,5,6,4,8] union([],X,X). union([X|R],Y,Z) :- member(X,Y), !, union(R,Y,Z). union([X|R],Y,[X|Z]) :- union(R,Y,Z). Or could just append and then remove duplicates. 62