HUMIT2720, V2007, Innleveringssett 1
Besvarelsene skal leveres individuelt innen 7.2. i Class Fronter!
Oppgave 1
Du skal lage en familiedatabase i Prolog. Følgende relasjoner skal være de som databasen er gitt ved: mann/1, kvinne/1, forelder/2. For den siste gjelder at forelder(A,B) hvis A er far eller mor til B. Du skal innføre nye binære predikat, og lage regler for dem slik at de kan beregnes fra databasen, f.eks. far(X,Y) :- forelder(X, Y), mann(X).
Lag regler for:
- far
- mor
- bestemor
- bestefar
- oldemor
- oldefar
- stammer_fra
- datter
- sønn
- barnebarn
Legg inn en familiedatabase gitt ved forelder, mann og kvinne med minst fem generasjoner, slik at alle predikatene blir sanne for minst et par, og der ikke alle er i slekt med hverandre og prøv ut.
Oppgave 2
Lag et predikat som tar et element og en liste. Hvis elementet finnes i listen, returnerer predikatet en ny liste med elementet fjernet. Hvis elementet ikke finnes i listen returneres No, eks
32 ?- remove(a, [b,a,c,d],R).
R = [b, c, d] ;
No
33 ?- remove(a, [b,c,d],R).
No
34 ?- remove(X, [b,c,d],R).
X = b
R = [c, d] ;
X = c
R = [b, d] ;
X = d
R = [b, c] ;
No
35 ?-
Oppgave 3
Vi skulle også gjerne laget regler for
- bror
- søster
- tante
- onkel
- nevø
- niese
- fetter
- kusine
- tremenning
Men her oppstår et problem. Det enkleste ville være å skrive f.eks.
bror(X,Y) :- mann(X), far(Z,X), far(Z,Y).
Problemet er at da blir en gutt sin egen bror, din far blir din onkel osv. Det finnes veier rundt dette i PROLOG, men de er ikke helt rene. Vi skal i stedet endre databasen. Vi har ikke lenger predikatet forelder/2 som basis. I stedet har vi predikatet barna_til/2. Her er andre argument en liste, listen over alle barna til første elementet, f.eks. barna_til(kari, [anne, per, ali]) betyr nå at kari er forelder til nøyaktig 3 forskjellige barn: anne, per og ali.
a. Lag først nye regler for
- far
- mor
- datter
- sønn
basert på dette.
b. Lag deretter regler for de andre predikatene, bror, søster, etc. Forandr familiedatabasen din og prøv ut reglene. Hint: Bruk oppgave 2.