Prologopgaver; lister og strukturer

© 2004 Henning Christiansen

Til kursusgang 11/2-2004 foreslås det, man tager opgave 1 (1.1 løses i fællesskab som introduktion) og opgave 3 (evt. ikke alle spørgsmål).

Arbejd gerne med de øvrige som hjemmearbejde, og evt. (HC:Prolog) opg. 5.1 (s. 46) og 5.3 (s. 47).

Opgave 1

Opgaven drejer sig om eksemplet med logiske kredse modelleret i Prolog; programmet finder du her.
Vi er interesseret i at konstruere en logisk kreds med tre input-ben kaldet A, B og C og et output-ben kaldet X. Sammenhængen mellem A, B, C og X er følgende: Hvis C=0 er X "A eller B"; hvis C=1 er "A eksklusiv-eller B"

Spørgsmål 1.1

Tegn en logisk kreds, som implementerer den nævnte logiske funktion.

Spørgsmål 1.2

Og skriv den om til et Prologprædikat og aftest det. Prøv evt. skrive en Prologforespørgsel, som udskriver sandhedstabellen i et huk ved at benytte prædikaterne write(-), nl og fail, som kan slås op i Bratkos bog eller en Prologmanual.

Opgave 2

Spørgsmål 2.1

Benyt prædikatet for fulladder'en til at konstruere et prædikat, som lægger to 3-bits-tal sammen og får et 4-bits-tal ud af det.

Spørgsmål 2.2

Benyt prædikatet fra spørgsmål 1 til at definere et nyt prædikate som trækker fra. (Listigt spørgsmål med en vigtig pointe.)

Opgave 3

Denne opgave drejer sig om strukturer og lister i Prolog. Det gennemgående eksempel i opgaven har at gøre med bøger, biblioteker og litteratursøgning.

En bog er angivet ved en struktur beskrevet som følger:

bog( forfatter, titel, antal-sider, type)
Her er to eksempler på bøger:
  bog( bratko, prolog, 423, faglitteratur)
bog( dumas, de_3_musketerer, 777, underholdning)
Et bibliotek er angivet som en liste af bøger, f.eks.:
  [  bog( sayers, de_9_klokkeslag, 288, krimi),
     bog( bratko, prolog, 423, faglitteratur),
     bog( tanenbaum, structured_osv, 465, faglitteratur),
     bog( lang, intrigernes_hus, 192, krimi),
     bog( dumas, de_3_musketerer, 777, underholdning)
  ]

Spørgsmål 1

Forklar i ord, hvad det vil sige, at et givet bibliotek tilfredsstiller prædikatet p defineret som følger:
  p( [ bog( rifbjerg, _, _, _) | _]).
  p( [_|Rest] ) :- p(Rest)

Spørgsmål 2

Definer et prædikat i Prolog, som, givet et bibliotek, finder en liste af alle bibliotekets titler. Prædikatet skal have følgende form:
  titler( bibliotek, liste-af-titler)

Spørgsmål 3

Definer et prædikat i Prolog som, givet et bibliotek, finder en liste af alle kriminalromaner, dvs. alle bøger hvis type er krimi. Prædikatet skal have følgende form:
  krimier( bibliotek, liste-af-krimier)

Spørgsmål 4

Til brug i en sommerhusferie ønsker vi at udtage en liste af bøger fra et bibliotek som
- ikke indeholder faglitteratur,
- ikke overstiger 800 sider.
Definer et prædikat i Prolog med følgende form:
  ferielæsning( bibliotek, bogliste, antal-sider)
For et givet bibliotek skal prædikatet kunne generere de mulige udtag af ferielitteratur (som beskrevet ovenfor) i form af lister af bøger. prædikatet oplyser yderligere det samlede antal sider i en funden liste.
Sidst rettet 11. februar 2004