1 / 18

LING 388: Language and Computers

LING 388: Language and Computers. Sandiway Fong Lecture 4: 9/1. Administrivia. LING 388 Homework #1 handed out today submit homework by email sandiway@email.arizona.edu due date is one week from now Wednesday September 8th (by midnight) Reminder No class on Monday (Labor Day)

brand
Download Presentation

LING 388: Language and Computers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LING 388: Language and Computers Sandiway Fong Lecture 4: 9/1

  2. Administrivia • LING 388 Homework #1 • handed out today • submit homework by email • sandiway@email.arizona.edu • due date is one week from now • Wednesday September 8th (by midnight) • Reminder • No class on Monday (Labor Day) • Resume next Wednesday (Harvill 208)

  3. Today’s Topic • Backup lecture material with an introduction to SWI-Prolog • www.swi-prolog.org • manuals available online • SWI-Prolog is already installed on all the lab machines

  4. SWI-Prolog • How to start it? • from the Windows Program menu • interpreter window pops up and is ready to accept database queries (?-) • How to see what’s in the database? • ?- listing. • How to see what the current working directory is? • (the working directory is where your files are stored) • ?- working_directory(X,Y). • X: current working directory, Y: new working directory • How to change to a new working directory? • ?- working_directory(X,NEW).

  5. SWI-Prolog • How to enter facts and rules into the database? • Method 1: At the interpreter prompt • ?- assert(medal(gold)). • will add to the database the fact: • medal(gold). • Remember that Prolog cares about the order of facts in the database: • ?- asserta(medal(gold)). • adds medal(gold). to the front • ?- assertz(medal(gold)). • adds medal(gold). to the end

  6. SWI-Prolog • How to enter facts and rules into the database? • Method 2: Create a file in the current working directory containing database facts and rules. Load the file using: • ?- consult(FILE). • or • ?- [FILE ]. • (comma-delimited list notation)

  7. SWI-Prolog • A note on filenames • Convention: Prolog files normally have extension .pl • e.g. mydb.pl • (.pl is also used by Perl) • FILE above should be the filename without the extension • e.g. ?- [mydb]. • The period (.) is a special symbol in Prolog. If you wish to specify the full name, you must enclose it in single quotes • e.g.?- [’mydb.pl’].

  8. SWI-Prolog • Stepping through the computation tree • By default, Prolog just returns answers without showing its work • Turn on tracing mode for the Prolog debugger • ?- trace. • Run queries as before • Hit the return key to step (“creep”) through the computation • e.g. • ?- a(X). • 1 1 Call: a(_430) ?RETURN • 1 1 Exit: a(1) ?RETURN • X = 1 ?; • 1 1 Redo: a(1) ?RETURN • Type h(help) instead of RETURN to see other options • Turn off Prolog debugger • ?- nodebug.

  9. Exercise 1a: Prolog Queries • Create database • modal(should). • modal(could). • modal(shall). • modal(may). • Load the database into Prolog • Run queries • ?- modal(X). • use ; to get all answers • ?- \+ modal(be). • Note Prolog doesn’t give you the opportunity to use ; to get more answers. Why? • ?- findall(X,modal(X),L). • What does findall/3 do? /3 means “has three arguments”

  10. Exercise 1b: Prolog Queries • Modify the database to include facts • aux(am). • aux(are). • aux(is). • aux(was). • aux(were). • aux(do). • aux(does). • aux(did). • and the rules for hasCNeg/1 implementing • English modals and auxiliaries have a contracted negative form • hasCNeg(X) :- modal(X). • hasCNeg(X) :- aux(X).

  11. Exercise 1b: Prolog Queries • Verify the operation of hasCNeg/1 by running queries • ?- hasCNeg(X). • ?- findall(X,hasCNeg(X),L). • ?- hasCNeg(sleep). • Homework Question (3pts) • Modify predicate hasCNeg/1 to block • ?- hasCNeg(shall).*shalln’t • ?- hasCNeg(may).*mayn’t • ?- hasCNeg(am).*amn’t • Hint: see previous lecture • (Submit both your definition and results of queries)

  12. Exercise 2a: Building and Taking Names Apart • Built-in predicate atom_chars/2 has two modes of usage • takes names apart • ?- atom_chars(will,X). • X is the list of characters representing will • builds names from a list of characters • ?- atom_chars(X,[’J’,o,h,n]). • use quotes around capitalized J to avoid intepretation as a variable • ?- atom_chars(X,[w,o,n,’’’’,t]). • ’’’’ denotes the single quote

  13. Exercise 2a: Building and Taking Names Apart • Run queries • ?- atom_chars(has,[h,a,s]). • ?- atom_chars(will,[w,X,l,l]). • ?- atom_chars(X,Y). • ?- atom_chars(X,[J,o,h,n]). • What happens in the last two cases?

  14. Exercise 2b: Building and Taking Names Apart • append/3 is a built-in predicate in SWI-Prolog defined as follows: • append(L1,L2,L3) holds if list L3 is the linear concatenation of lists L1 and L2 • append/3 has multiple modes of usage • Run example queries: • ?- append([1],[2,3],X). • ?- append(X,Y,[1,2]). • ?- append(_,[X],[1,2,3]). • ?- append(X,Y,Z). • Note: • the underscore character ‘_’ is a special variable • no binding will be reported by the interpreter for underscores

  15. Exercise 2b: Building and Taking Names Apart • Homework Question (6pts) • Use both atom_chars/2 and append/3 to define a new rule • addNT/2 such that: • addNT(X,Y) converts between a modal or auxiliary verb X and its contracted negative counterpart Y • Examples: • ?- addNT(could,’couldn’’t’). • ?- addNT(is,’isn’’t’). • Make sure it • (A) rejects may <-> mayn’t • (B) handles irregular forms • can <-> can`t, shall <-> shan`t, will <-> won`t • (Submit both your definition and results of relevant queries)

  16. Exercise 3: Computation Tree • append/3 can be defined recursively as follows: • app([],L2,L2). Base case • app([X|L1],L2,[X|L3]) :- app(L1,L2,L3). Recursive case • append/3 is already defined (built-in), so we use the predicate name app/3 to avoid a naming clash • Re-run queries for append/3 with app/3 to see that app/3 has the same behavior: • ?- app([1],[2,3],X). • ?- app(X,Y,[1,2]). • ?- app(_,[X],[1,2,3]). • ?- app(X,Y,Z). • Make use of the tracing facility to convince yourself that the definition is correct

  17. Exercise 3: Computation Tree • Homework Question (3pts) • (A) How many inference steps does it take to run the following query: • ?- app([1,2,3],[4],L). • (B) How many inference steps does it take to run the following query: • ?- app([1],[2,3,4],L). • (C) Explain why the number of steps differ despite the fact both queries return the same result. • For inference steps: count the number of CALLs

  18. Summary • 3 homework questions • 12 pts on offer

More Related