User Tools

Site Tools


sc330_f2016:prolog1

This is an old revision of the document!


Objective

  • Gain experience with logic programming.
  • Become familiar with Prolog.
  • Gain understanding of the declarative nature of prolog.

Installation

For this class, we use SWI-Prolog. You can download binaries for a Windows or macOS system here.

Also, there is an unofficial tutorial for installation here.

For Mac with Homebrew installed, you can do this command (info here):

brew install swi-prolog

For Ubuntu, you can do these commands:

sudo add-apt-repository ppa:swi-prolog/stable
sudo apt-get update
sudo apt-get install swi-prolog

Deliverables

You will turn in two prolog programs (in separate files) that solve the following logic puzzles:

To help you start, we've provided a sample solution to It's a tie. Use this as a model for your own Prolog solutions.

Notes

  • There are links above to the solutions (not the Prolog code) for these two puzzles. We strong encourage taking a few minutes to solve these puzzles by hand so that you get a feel for how to solve them and the “facts” you're extracting from the clues in the puzzle. This will give you a better feel for what you need to encode in your Prolog solution as well as giving you a feel for what Prolog's trying to do under the hood. (And it's fun!)
  • Just copy and paste the all_different function. It simply checks to make sure each item in the list is unique.
  • Check spelling errors. There is no such thing as misspelled atoms. So speigel and spiegel are both valid but different.
  • Once you have a solution, just check whether it satisfies each of the numbered rules in the problem.
  • These problems make extensive use of the “not” operator, \+.
    • \+ works as you expect when all variables are completely bound.
    • If E contains unbound variables, \+E will try to find bindings to that will make E true. If Successful \+ will fail.
  • This lab is taken from this site. There may be additional resources there.
sc330_f2016/prolog1.1539985775.txt.gz · Last modified: 2021/06/30 23:40 (external edit)