Jos minulla on faktat...
asuu(taina,turku).
asuu(lasse,helsinki).
asuu(tiina,helsinki).
...niin miten listata kaikki kaupungit, joissa jokin asuu. Aluksi tulee mieleen tämä tyypillinen kysymys:
̎[1] 17 ?- asuu(_,X).
X = turku ;
X = helsinki ;
X = helsinki.
Mutta tuossa ei kysytä kaupunkeja, vaan asumisia, relaatioita. Helsingissä asutaan kahdesti.
Kuuluuko prologissa edes ajatella "vakiokeskeisesti", eli kysellä vakiota, jolla on tietynlaisia suhteita.
asuu(taina,turku).
asuu(lasse,helsinki).
asuu(tiina,helsinki).
...niin miten listata kaikki kaupungit, joissa jokin asuu. Aluksi tulee mieleen tämä tyypillinen kysymys:
̎[1] 17 ?- asuu(_,X).
X = turku ;
X = helsinki ;
X = helsinki.
Mutta tuossa ei kysytä kaupunkeja, vaan asumisia, relaatioita. Helsingissä asutaan kahdesti.
Kuuluuko prologissa edes ajatella "vakiokeskeisesti", eli kysellä vakiota, jolla on tietynlaisia suhteita.
Vastaukset 2
Vanhimmat
Mites tällainen:
kaupungit(U) :- findall(X,asuu(_,X),L), sort(L,U).
nimet(U) :- findall(X,asuu(X,_),L), sort(L,U).
jolloin saadaan:
?- kaupungit(U).
U = [helsinki, turku].
?- nimet(U).
U = [lasse, taina, tiina].
Noinhan se onnistuu. Vähän näyttää imperatiiviselta ratkaisulta. Ajattelin että on tuohon on prologissa yksinkertaisempi keino...