I dagens föreläsning:

Preview:

DESCRIPTION

Logikprogrammering 10 P: 28 oktober 2002 Idag: Är det möjligt att samla alla lösningar från en fråga som ställs till ett prologprogram?. I dagens föreläsning:. - Kan Prolog leverera samtliga mål som uppfyller en fråga? Varför gör Prolog inte det från början? - PowerPoint PPT Presentation

Citation preview

Kenneth Wilhelmsson [kw@ling.gu.se] 1

Logikprogrammering 10 P: 28 oktober 2002

Idag: Är det möjligt att samla alla lösningar från en fråga som ställs till ett

prologprogram?

Kenneth Wilhelmsson [kw@ling.gu.se] 2

I dagens föreläsning:

- Kan Prolog leverera samtliga mål som uppfyller en fråga? Varför gör Prolog inte det från början?

• (Antagligen pga Prologs speciella syften presenterar en sökning efter mål dessa mål ett i taget för användaren.)

• Hur är det möjligt att finna den totala mängden svar snabbt?

Kenneth Wilhelmsson [kw@ling.gu.se] 3

Repetition från David Hjelms senaste föreläsning

• In- och utmatning (kortfattad återblick)

• Grundläggande för den interaktivitet som modern människa-dator-interaktion bygger på.

• (Jämför med beräkning som en för datorn tillrättalagd process som ej tar hänsyn till olika användares intressen)

• Dessutom nytt om in- och utmatning från filer…

Kenneth Wilhelmsson [kw@ling.gu.se] 4

Att skriva till skärmen och läsa från tangentbordet

• Predikat i Prolog:read(X).:| pelle.X = pelle?get_char(X).:| pelle.X = p?

write(pelle).pelle.write(”pelle”).[p,e,l,l,e]

Kenneth Wilhelmsson [kw@ling.gu.se] 5

Dagens nyheter angående inläsning…

Kenneth Wilhelmsson [kw@ling.gu.se] 6

Viktig_fil.txt

Kenneth Wilhelmsson [kw@ling.gu.se] 7

See/1 för att öppna en fil:

see/1 förändrar indataströmmen fullständigt

- från tangentbordet till en angiven fil (argumentet)

härefter: get_line/1

Kenneth Wilhelmsson [kw@ling.gu.se] 8

Seen/0 avslutar inläsningen från angiven fil.

seen.yes?- get_line(Str).|: hejdå

Str = ”hejdå” (eller [’h’,’e’,’j’,’d’,’å’])

Kenneth Wilhelmsson [kw@ling.gu.se] 9

Motsvarigheten till see/1 heter tell/1 för att skriva till filer

Observera att det gamla textinnehållet raderas och ersätts av vad som anges när tell används.

tell(’viktig_fil.txt’).write(’adjö’), nl.told.

Kenneth Wilhelmsson [kw@ling.gu.se] 10

När filen tar slut

• När filen är slut returneras end_of_file –

read(X).X = end_of_file

• - Om man försöker läsa hel rad:see(’viktig_fil.txt’).yesget_line(R).R = [’a’,’d’,’j’,’ö’].get_line(str)! Existence error in get0/2! attempt to read past end of streamgoal: get0('$stream'(2740388),_76)| ?-

Kenneth Wilhelmsson [kw@ling.gu.se] 11

När motsvarigheten till seen/0 för inskrivande, told/0, används ändras outputströmmen till att gälla bildskärmen igen.

?- write(’adjö’).yes?- told.yeswrite(’adjö’).adjöyes

Kenneth Wilhelmsson [kw@ling.gu.se] 12

Återstoden av dagens föreläsning:• Att samla lösningar

och eventuellt gruppera dem efter olika egenskaper

Kenneth Wilhelmsson [kw@ling.gu.se] 13

Bagof/3

Kenneth Wilhelmsson [kw@ling.gu.se] 14

Kenneth Wilhelmsson [kw@ling.gu.se] 15

Kenneth Wilhelmsson [kw@ling.gu.se] 16

Kenneth Wilhelmsson [kw@ling.gu.se] 17

Kenneth Wilhelmsson [kw@ling.gu.se] 18

Kenneth Wilhelmsson [kw@ling.gu.se] 19

Kenneth Wilhelmsson [kw@ling.gu.se] 20

Findall/3

Kenneth Wilhelmsson [kw@ling.gu.se] 21

Kenneth Wilhelmsson [kw@ling.gu.se] 22

Setof/3

Kenneth Wilhelmsson [kw@ling.gu.se] 23

Recommended