1.3k

# CSE240 Lecture 25

Introduction to Programming Languages
Expressions with Prolog
(202112)

January 25, 2017

## Transcript

1. jgs
CSE 240
Introduction to Programming Languages
Lecture 25: Expressions in Prolog
Dr. Javier Gonzalez-Sanchez
[email protected]
javiergs.engineering.asu.edu | javiergs.com
PERALTA 230U
Office Hours: By appointment

2. jgs
Expressions

3. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 3
jgs
Arithmetic Queries
?- X is 3 + 5.
X=8
?- X is 3 mod 2.
X=1
?- X is 3 mod 2 - 1 * 5 / 9.
X=0.4444444444444444
?- X is 5+4, Y is 5-4.
X=9
Y=1
?- X is 5*4, Y is 2^3.
X=20
Y=8

4. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 4
jgs
Arithmetic Queries
?- X is 234556^100.
X = 105841181316488988298177591518
4...
?- X is 5/3.
X=1.66666667
?- X is sqrt(3),Y is 3^0.5.
X=Y
Y=1.7320508075688772
?- X is 8 mod 3.
X=2
?- Y is 10^3 * (1+1) + 3.
Y=2003

5. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 5
jgs
Arithmetic Queries
?- X is 10+5.
X = 15
?- 6 is 10+5.
false
?- 15 is 10+5.
true
?- 10+5 is X.
Error: Arguments are not sufficiently instantiated
?- 10+5 is 10+5.
false

6. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 6
jgs
Arithmetic Queries
§ X is 5 /3, X = 1.
false
§ X is 5 /3, Y = 1.
X=1.666666667,
Y=1
§ X is 5 /3; X = 1.
X = 1.6666666667
X = 1

7. jgs
Rules and Recursion

8. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 8
jgs
Rules as functions
§ doSomething(A,B,P) :- P is A + B.
?-doSomething(3,2,P).
?-doSomething(3,2,10).

9. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 9
jgs
Recursion | Factorial
% this is fact
factorial(0, 1).
% this is a rule
% the factorial of F is N*F1
% if N>0 and
% N1 is N-1 and
% the factorial of N1 is F1
factorial(N, F) :-
N>0,
N1 is N - 1,
factorial(N1, F1),
F is N * F1.
?- factorial (3, W).
W=6
1. factorial(3, W)
apply rule 2
2. 3>0, N1 is 3-1, factorial (N1, F1), F is 3 *F1
solve the individual parts
true, 2 is 3-1, factorial (2, F1), F is 3*F1
apply rule 2 again
3. 2>0, N2 is 2-1, factorial (N2, F2), F1 is 2 * F2
solve the individual parts
true, 1 is 2-1, factorial (1, F1), F1 is 2*F2
apply rule 2 again
4. 1>0, N3 is 1-1, factorial (N3, F3), F2 is 2 * F3
solve the individual parts
true, 0 is 1-1, factorial (0, F3), F2 is 1*F3
apply rule 1
5. factorial (0, 1)
F3 is 1
6. Go back, replace F3 to get F2, then F2 to get F1,
then F1 to get F.

10. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 10
jgs
Recursion | Factorial

11. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 11
jgs
Recursion | Fibonacci
fib(0, 0).
fib(1, 1).
fib(X, Y) :- X > 1,
X2 is X – 2, fib(X2, Y2),
X1 is X – 1, fib(X1, Y1),
Y is Y1 + Y2.

12. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 12
jgs
Recursion | Fibonacci

13. jgs
Final Exam Review

14. jgs
The following slides shows some examples
related to some topics
This is NOT a comprehensive list of topics
Topics in the exam can be found
Weeks 1 to 8

15. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 15
jgs
Topics
§ Programming Languages Concepts
§ C
§ C++
§ LISP
§ Prolog
2 or 5 questions per topic. Most of them involve programming

16. jgs
Test Yourselves
C/C++

17. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 17
jgs
C recursion
#include
void fun(int x) {
if (x>0) {
printf("%d", x);
fun(x-1);
printf("%d", x);
}
}
int main() {
fun(5);
}

18. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 18
jgs
C/C++ pointers
§ What delete expression correspond to the expression
ptr=new int[100]

19. jgs
Test Yourselves
Lisp

20. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 20
jgs
LISP
§ What is the output of the following code?
(let ((x '(1 2)) (y '(9 10)))
(print (+ (first x) (first y)) )
)

21. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 21
jgs
LISP
1. Create a function that receives a list and return the lowerst value
2. Create a function that receives a list and an integer and return “true” if the number
exist in the list
3. Create a function that receives a list and return “true” if the list contains a
palindrome. such as (a b c d e d c b a)
4. Create a variable in Lisp to store a tic-tac-toe, such as
x E x
0 X 0
E x E

22. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 22
jgs
LISP
5. Create a function that receives the variable with the tic-tac-toe and return
“true” if there is an empty space (an “E” letter).
6. The following list represent a tree
'(a (b () ()) (c (d () () ) (e () ()) ) )
Create a function (recursive) that traverse the tree and print all the elements
as A B C D E.
7. What is printed by the following code?
(setf route '(boston cambridge lincoln concord))
(print (first (rest route)))

23. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 23
jgs
LISP
8. What is the output of the following code?
(let ((x '(1 2)) (y '(9 10))) (print (+ (first x) (first y)) ) )
9. What is printed by the following code?
(defun fun(n)
(if (= n 0) () (fun (- n 1)) )
n
)
(print (fun 5))
10. What is equivalent code in C++ for the following LISP statement
(if (< 1 2) (+ 3 4) (- 5 6) )

24. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 24
jgs
LISP
1. A function test-min that returns the lower value in a List of numbers
(test-min L)
2. A function test-average that returns the average of all values in a List of
numbers
(test-average L)
3. A function test-fibonacci that prints the first n elements of the fibonacci series
(test-fibonacci n)
4. A recursive function that returns the leftmost even element in a list of
numbers
(test-even L)
5. A functions that traverse a list and returns how many of its elements are 0
(test-count-zeros L)
6. A recursive function that return the N member of a list L (assuming that the
elements are numbered from zero onwards):
(test-get n L)
7. A recursive function that returns non-NIL if x is a member of the list L.
(test-is-in-list x L)

25. jgs
Test Yourselves
Prolog

26. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 26
jgs
Q1
What is the predicate logic expression equivalent to
"Charlie owns a computer"
owns(charlie, computer).

27. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 27
jgs
Q2
instructor(john,cs365).
instructor(mary,cs311).
enrolled(danielle,cs365).
enrolled(danielle,cs446).
§ Which query provides a list of all the students enrolled in cs365?
enrolled(Who, cs365).

28. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 28
jgs
Q3
If weather is cold, everyone likes it.
Write this statement as a Prolog clause.
likes(X, weather) :- cold(weather).
%notice “weather” in lowercase

29. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 29
jgs
Q5
§ Given the following facts
§ cat(tom).
§ black_spots(tom).
§ dog(pluto).
§ white_spots(pluto)
§
Which rule defines in Prolog the following sentence:
§ "mary owns a Pet if it is a cat and it has black spots"
owns(mary, Pet):- cat(Pet), black_spots(Pet).

30. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 30
jgs
Q6
Which rule defines in Prolog the following sentence:
"If someone owns something, he loves it"
loves(Who, What):-owns(Who, What).

31. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 31
jgs
Q7
1
2
3
4

32. Javier Gonzalez-Sanchez | CSE240 | Spring 2020 | 33
jgs
Test Yourselves
§ A recursive function rec is defined as follows
Write a set of rules in Prolog to define the solution to this function.
ï
î
ï
í
ì
³
-
-
+
-
=
£
=
3
)
3
(
*
)
2
(
)
1
(
2
1
1
0
)
(
n
n
rec
n
rec
n
rec
n
n
n
rec

33. jgs
CSE 240 Introduction to Programming Languages
Javier Gonzalez-Sanchez, Ph.D.
[email protected]
Fall 2021
Copyright. These slides can only be used as study material for the class CSE240 at Arizona State University.
They cannot be distributed or used for another purpose.