Download presentation

Presentation is loading. Please wait.

Published byCody Huck Modified over 2 years ago

2
CS 2104 – Prog. Lang. Concepts Final wrap-up Dr. Abhik Roychoudhury School of Computing

3
Cuts A cut prunes an explored part of a Prolog search tree. a(1):-b. a(2):-e. b:- c. b:-d. d. e. ?- a(X). X = 1 ; X = 2 ; no Cut in a clause commits to the use of that clause. Cut has the effect of making b fails if c fails. X=2 X=1 a(X) b e c d X=1 X=2 !, c ?- a(X). X = 2 ; no

4
a(X):-b(X). a(X) :-f(X). b(X):-g(X), v(X). b(X):-X = 4, v(X). g(1). g(2). g(3). v(1). v(X) :- f(X). f(5). ?- a(Z). Z = 1 ; Z = 5 ; no v(3) a(Z) b(Z)f(Z) g(Z), v(Z) Z=4,v(4) backtrack v(1)f(1) Z = 1 v(1)v(2) f(2) backtrack f(3) backtrack f(4) backtrack f(5) Z = 5 !, ?- a(Z). Z = 1 ; Z = 5 ; no

5
Green Cuts, Red Cuts Green Cut a cut the prunes part of a Prolog search tree that cannot possibly reach a solution used mainly for efficiency sake. Red Cut a cut that alters the set of possible solutions reachable. Powerful tool, yet fatal and can be confusing Handle with care

6
Merging two lists merge([X|Xs],[Y|Ys],[X|Zs]) :- X

7
Example: Green cut merge([X|Xs],[Y|Ys],[X|Zs]) :- X

8
Example: Red Cut member(X,[X|Xs]) :- !. member(X,[Y|Ys]) :- member(X, Ys). member(1, [1,2,1,1,3]) is more efficient. But member(X, [1,2,3]) produces only one answer X = 1

9
Summary Prolog is a procedural language with: Assign once variables Nondeterminism As a result of having assign once variables Assignment is symmetric Test and assignment represented by same operator. Unification combines the concepts of test, assignment and pattern matching.

10
Summary As a result of having nondeterminism Control issues for the search Cuts (allows the programmer explcit control) Meaning of Prolog program given by queries that can be evaluated to true. Applications of Prolog Database query language Grammar Processing, Natural Language Processing

11
Homework 10 mergesort([], []) :- !. mergesort([A], [A]) :- !. mergesort(L, L1) :- split(L, M, N), mergesort(M, M1), mergesort(N, N1), merge(M1, N1, L1). split([], [], []). split([A], [A], []). split([A,B|Rest], [A|M], [B|N]) :- split(Rest, M, N).

12
Homework 10 Replacing an element in a list replace(X, Y, [X|Rest], [Y|Rest]) :- !. replace(X, Y, [Z|Rest], [Z|List]) :- replace(X, Y, Rest, List).

13
Homework 10 Removing duplicates in a list remdup(L, L1) :- remdup(L, [], L1). remdup([], L, L). remdup([X|Xs], SoFar, List) :- member(X, SoFar), !, remdup(Xs, SoFar, List). remdup([X|Xs], SoFar, List) :- remdup(Xs, [X|SoFar], List).

14
Homework 10 What happens for query find(X) find(X) :- not(p(X)). p(X) :- q(X), r(X). q(f(X)) :- q(X), X \= b. r(X) :- X \= a

15
Homework 10 find(X) not(p(X)) p(X) q(X), r(X) q(X1), r(f(X1)) q(X2), r(f(f(X2))) Query eval. Does not terminate …

16
Answers for last year’s final exam posted in course web-site. Look under -> Materials -> Other Resources

17
Thank You

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google