230 likes | 379 Views
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?
E N D
Logikprogrammering 10 P: 28 oktober 2002Idag: Ä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]
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]
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]
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]
Dagens nyheter angående inläsning… Kenneth Wilhelmsson [kw@ling.gu.se]
Viktig_fil.txt Kenneth Wilhelmsson [kw@ling.gu.se]
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]
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]
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]
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’). yes get_line(R). R = [’a’,’d’,’j’,’ö’]. get_line(str) ! Existence error in get0/2! attempt to read past end of stream goal: get0('$stream'(2740388),_76)| ?- Kenneth Wilhelmsson [kw@ling.gu.se]
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. yes write(’adjö’). adjö yes Kenneth Wilhelmsson [kw@ling.gu.se]
Återstoden av dagens föreläsning: • Att samla lösningar och eventuellt gruppera dem efter olika egenskaper Kenneth Wilhelmsson [kw@ling.gu.se]
Bagof/3 Kenneth Wilhelmsson [kw@ling.gu.se]
Findall/3 Kenneth Wilhelmsson [kw@ling.gu.se]
Setof/3 Kenneth Wilhelmsson [kw@ling.gu.se]