Prolog Mini-Exercises: Solving Logic Problems

 
Prolog
 
11-19-2015
 
Mini-exercise
 
What are all the answers that Prolog returns for the
following goals?
?- member_cut(X,[c,b,r]), mymember(X,[r,b]).
 
 
?- mymember(X,[r,b]), member_cut(X,[c,b,r]).
 
 
 
?- member_cut(X,[c,b,r]), member_cut(X, [b,c]).
 
 
Mini-exercise
 
What are all the answers that Prolog returns for the
following goals?
?- member_cut(X,[c,b,r]), mymember(X,[r,b]).
false.
 
?- mymember(X,[r,b]), member_cut(X,[c,b,r]).
X = r ;
X = b ;
false.
 
?- member_cut(X,[c,b,r]), member_cut(X, [b,c]).
X = c ;
 
Mini-exercise #2
 
4. What are all the answers that Prolog returns for the following goals?
?- not(mymember(1,[1,2,3])).
 
?- not(mymember(5,[1,2,3])).
 
?- not(mymember(X,[1,2,3])).
 
?- mymember(X,[1,2,3]), not(mymember(X,[1,2,4])).
 
?- not(mymember(X,[1,2,4])), mymember(X,[1,2,3]).
 
 
Mini-exercise #2
 
4. What are all the answers that Prolog returns for the following goals?
?- not(mymember(1,[1,2,3])).
false.
?- not(mymember(5,[1,2,3])).
true.
?- not(mymember(X,[1,2,3])).
false.
?- mymember(X,[1,2,3]), not(mymember(X,[1,2,4])).
X = 3 ;
false.
?- not(mymember(X,[1,2,4])), mymember(X,[1,2,3]).
false.
 
Mini-exercise #2
 
5. Consider the standard version of 
append
:
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).
If you know that the first argument is ground (that 
is, fully instantiated,
containing no variables), there is a more efficient version that you can write by
including a cut.
(a) Define such a version.
 
 
(b) Give an example of a query that has exactly the same behavior for both
the standard version and the version with a cut.
 
 
Mini-exercise #2
 
5. Consider the standard version of 
append
:
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).
If you know that the first argument is ground (that 
is, fully instantiated,
containing no variables), there is a more efficient version that you can write by
including a cut.
(a) Define such a version.
append([],Ys,Ys) :- !.
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).
 
(b) Give an example of a query that has exactly the same behavior for both
the standard version and the version with a cut.
 
append([1,2],[3,4,5],X).
 
Mini-exercise #2
 
5. Consider the standard version of 
append
:
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).
If you know that the first argu
ment is ground (that is, fully instantiated,
containing no variables), there is a more efficient version that you can write by
including a cut.
(c) Give an example of a query that behaves differently for the standard
version and the version with a cut
 
(d) What restrictions do we need on the inputs for the two versions to
behave exactly the same? (Is it that the first argument is ground?)
 
Mini-exercise #2
 
5. Consider the standard version of 
append
:
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).
If you know that the first argu
ment is ground (that is, fully instantiated,
containing no variables), there is a more efficient version that you can write by
including a cut.
(c) Give an example of a query that behaves differently for the standard
version and the version with a cut
append(A,B,[1,2,3]).
(d) What restrictions do we need on the inputs for the two versions to
behave exactly the same? (Is it that the first argument is ground?)
No, it’s a little more general: just that the first argument not be a variable.
 
Mini-exercise #2
 
6. Which of the following lists represent valid difference lists? For valid
difference lists, what list do they represent?
 
[1,2|T]\T --
[1,2,3]\[] --
[1,2,3]\[1,2] --
[1,2,3|T]\[3|T] --
[1,2,3]\[1,2,3] --
 
Mini-exercise #2
 
6. Which of the following lists represent valid difference lists? For valid
difference lists, what list do they represent?
 
[1,2|T]\T -- valid, represented [1,2]
[1,2,3]\[] -- valid, represents [1,2,3]
[1,2,3]\[1,2] -- not valid
[1,2,3|T]\[3|T] -- valid, represents [1,2]
[1,2,3]\[1,2,3] -- valid, represents []
 
Mini-exercise #2
 
7. Write the list 
[squid,clam] 
as a difference list (in the most general possible
way). Also draw a box-and-arrow diagram of the first part of the difference list.
 
Mini-exercise #2
 
7. Write the list 
[squid,clam] 
as a difference list (in the most general possible
way). Also draw a box-and-arrow diagram of the first part of the difference list.
[squid,clam|T]\T
 ____________
   
 ____________
| 
  
| 
  
| 
  
| 
  
|
  
|
|  
 
o 
 
|   ----
 
|----->
 
|  
 
o 
 
|    T 
 
|
|_
 
|__ |_____ | 
  
|_
 
|__ |_____
 
|
   
 
|  
   
   
   
|
   
 
| 
   
   
   
|
   squid 
  
   
  
   clam
 
Questions?
Slide Note
Embed
Share

Explore the world of Prolog through a series of mini-exercises that demonstrate solving logic problems using different predicates and efficient techniques like cuts. The exercises cover topics such as membership checking, efficient list manipulation, and understanding the behavior of Prolog predicates.

  • Prolog
  • Mini-exercises
  • Logic problems
  • Predicate
  • Efficient techniques

Uploaded on Sep 30, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Prolog 11-19-2015

  2. Mini-exercise What are all the answers that Prolog returns for the following goals? ?- member_cut(X,[c,b,r]), mymember(X,[r,b]). ?- mymember(X,[r,b]), member_cut(X,[c,b,r]). ?- member_cut(X,[c,b,r]), member_cut(X, [b,c]).

  3. Mini-exercise What are all the answers that Prolog returns for the following goals? ?- member_cut(X,[c,b,r]), mymember(X,[r,b]). false. ?- mymember(X,[r,b]), member_cut(X,[c,b,r]). X = r ; X = b ; false. ?- member_cut(X,[c,b,r]), member_cut(X, [b,c]). X = c ;

  4. Mini-exercise #2 4. What are all the answers that Prolog returns for the following goals? ?- not(mymember(1,[1,2,3])). ?- not(mymember(5,[1,2,3])). ?- not(mymember(X,[1,2,3])). ?- mymember(X,[1,2,3]), not(mymember(X,[1,2,4])). ?- not(mymember(X,[1,2,4])), mymember(X,[1,2,3]).

  5. Mini-exercise #2 4. What are all the answers that Prolog returns for the following goals? ?- not(mymember(1,[1,2,3])). false. ?- not(mymember(5,[1,2,3])). true. ?- not(mymember(X,[1,2,3])). false. ?- mymember(X,[1,2,3]), not(mymember(X,[1,2,4])). X = 3 ; false. ?- not(mymember(X,[1,2,4])), mymember(X,[1,2,3]). false.

  6. Mini-exercise #2 5. Consider the standard version of append: append([],Ys,Ys). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). If you know that the first argument is ground (that is, fully instantiated, containing no variables), there is a more efficient version that you can write by including a cut. (a) Define such a version. (b) Give an example of a query that has exactly the same behavior for both the standard version and the version with a cut.

  7. Mini-exercise #2 5. Consider the standard version of append: append([],Ys,Ys). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). If you know that the first argument is ground (that is, fully instantiated, containing no variables), there is a more efficient version that you can write by including a cut. (a) Define such a version. append([],Ys,Ys) :- !. append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). (b) Give an example of a query that has exactly the same behavior for both the standard version and the version with a cut. append([1,2],[3,4,5],X).

  8. Mini-exercise #2 5. Consider the standard version of append: append([],Ys,Ys). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). If you know that the first argument is ground (that is, fully instantiated, containing no variables), there is a more efficient version that you can write by including a cut. (c) Give an example of a query that behaves differently for the standard version and the version with a cut (d) What restrictions do we need on the inputs for the two versions to behave exactly the same? (Is it that the first argument is ground?)

  9. Mini-exercise #2 5. Consider the standard version of append: append([],Ys,Ys). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). If you know that the first argument is ground (that is, fully instantiated, containing no variables), there is a more efficient version that you can write by including a cut. (c) Give an example of a query that behaves differently for the standard version and the version with a cut append(A,B,[1,2,3]). (d) What restrictions do we need on the inputs for the two versions to behave exactly the same? (Is it that the first argument is ground?) No, it s a little more general: just that the first argument not be a variable.

  10. Mini-exercise #2 6. Which of the following lists represent valid difference lists? For valid difference lists, what list do they represent? [1,2|T]\T -- [1,2,3]\[] -- [1,2,3]\[1,2] -- [1,2,3|T]\[3|T] -- [1,2,3]\[1,2,3] --

  11. Mini-exercise #2 6. Which of the following lists represent valid difference lists? For valid difference lists, what list do they represent? [1,2|T]\T -- valid, represented [1,2] [1,2,3]\[] -- valid, represents [1,2,3] [1,2,3]\[1,2] -- not valid [1,2,3|T]\[3|T] -- valid, represents [1,2] [1,2,3]\[1,2,3] -- valid, represents []

  12. Mini-exercise #2 7. Write the list [squid,clam] as a difference list (in the most general possible way). Also draw a box-and-arrow diagram of the first part of the difference list.

  13. Mini-exercise #2 7. Write the list [squid,clam] as a difference list (in the most general possible way). Also draw a box-and-arrow diagram of the first part of the difference list. [squid,clam|T]\T ____________ | | | | | o | ---- |-----> | |_ |__ |_____ | |_ | | squid ____________ | | o |__ |_____ | T | | | | clam

  14. Questions?

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#