University of Toronto - Winter 2007
Department of Computer Science

CSC 324: Principles of Programming Languages

Assignment 6
Clarification Page

Help Sessions

We have scheduled the following A6 Help Sessions:

  • Wednesday April 4: 2:00-3:00 PM (Bahen 5256)
  • Thursday April 5: 4:30-5:30 PM (Pratt 378 - 6 King's College Rd)
  • Tuesday April 10: 4:30-5:30 PM (Pratt 378 - 6 King's College Rd)
  • Thursday April 12: 4:30-5:30 PM (Pratt 378 - 6 King's College Rd)
  • Apr 9: Don't forget about Sheila's regular office hour on Wednesday 3:30 - 4:30 in Pratt 398D.

    General Clarifications

    Apr 5:
  • You may not use the built-in Prolog predicates findall/3, bag/3, setof/3.
  • You may use \+.

    Apr 10:
    if you want to include another prolog source file in your files you can use the following:
    :- [otherfile]. This will load '' when compiling (loading) the file this line is in.

    You may want to use this in your solution to Q3 to load your solution to Q2. Note that for marking Q3, we are simply going to replace your file with our correct solution before loading your file. This way you won't get punished twice for potential mistakes you did in Q2

    Question-Specific Clarifications

    Question 1
    Apr 5: flight/5 and airport/3 are the only prolog predicates of your own creation that you can use. You are allowed to use other prolog built-ins like >, etc.. If you want to use something else and you aren't sure, please ask Sheila.

    Question 1b
    Apr 11: Some clarification about "pairs of distinct cities": In the example database, you can fly from Toronto to Barcelona via Madrid with Iberia, and from Barcelona to Toronto via Madrid with Iberia. We expect your query will return both
    Note that Orig, Dest, and Air are just my choices for variable names.

    Question 1e
    Apr 9: The question asks for all cities that cannot be reached from Valencia in one flight. This includes cities which cannot be reached from Valencia at all, and those that can only be reached with two or more flights. Your query should however not need to distinguish between these two cases.

    Question 2a
    Apr 9: The assignment asks you to implement this predicate for the '?Origin, ?Destination, ?Path' mode and there is a very straightforward implementation for this. However, if you have problems with this case, it is sufficient to implement it assuming that at least one of the arguments will be instantiated, i.e. the modes
    +Origin, -Dest, -Path
    -Origin, +Dest, -Path, and
    -Origin, -Dest, +Path.
    Note that all of these are special cases of the ?,?,? case.

    Question 2b
    Apr 9: Above comments do not hold for the 'trip' predicate. This we require you to implement the way it says in the assignment handout (i.e. ?,?,?).

    Question 3
    Apr 11:
    Separate Algorithms:Question 3 says Do not write separate algorithms for price and duration. What we mean by this is that you should have one piece of code that tries to construct a trip. The only place that should be specific to price or duration is the place (e.g., a predicate) where you check the criterion. This place (e.g., a predicate) can be specific to price or duration and will succeed or fail, telling you whether to carry on with your search or to abort.

    As we discussed in class, you could construct the trip by starting at the origin and adding legs to your trip until you reach the destination. If you've got a partial trip constructed that is already over the limit, you want to stop exploring that particular path because no completion of the path you've constructing will ever allow you to find a trip that adheres to the criterion because your partial trip already exceeds the criterion. E.g, if you want to fly to Toronto to Hong Kong for under $700 and you've found a flight Toronto to Vancouver for $800, you're not going to be able to complete that path Toronto-Vancouver-..-Hong Kong for $700 or less, so you may as well abort and try another path!

    Clarifying the hint: The description of Question 3 starts with 3 paragraphs of text. The approach described in the third paragraph, which talks about finding better routes, only relates to Question 3b. Question 3a requests that you construct a trip that does not exceed some fixed limit. In 3a, you need to try to construct a trip and if your partial path exceeds the limit you want to stop exploring that path. In 3b, you want to follow the basic algorithm described in the 3rd paragraph.
    Back to the main page