• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencja ogonowa w Prologu

VPS Starter Arubacloud
0 głosów
1,040 wizyt
pytanie zadane 18 marca 2017 w Inne języki przez aborolabis Nowicjusz (120 p.)
Cześć.

Mam problem związany z (jak w temacie) rekurencją ogonową w Prologu. Otóż, nie jestem informatykiem i chociaż bardzo się starałam to zrozumieć, nie potrafię. Przeczytałam chyba z 10 książek, niestety, w przykładach dotyczy to cyfr (najlepszy i najczęstszy przykład - silnia) - natomiast prowadzący wyznaczył zadanie, ażebym wykonała drzewo genealogiczne rekurencją ogonową. Prośba o wyjaśnienie na zajęciach, jak tego dokonać, była niczym rzut grochem o ścianę... Nie mam pojęcia, jak się do tego zabrać, nawet metoda prób i błędów była w moim przypadku nieskuteczna.

Liczę na Waszą pomoc, jakąś wskazówkę, cokolwiek...
Iza.

PS. Przepraszam, jeśli nie trafiłam w kategorię, ale jak mówiłam, nie jestem informatykiem.
komentarz 20 marca 2017 przez Raymond.Z Obywatel (1,800 p.)
Cześć. Na dobry początek powiedz mi, umiesz wykonać drzewo genealogicznie jakąkolwiek metodą?
komentarz 20 marca 2017 przez aborolabis Nowicjusz (120 p.)
Tak. Zarówno drzewo, jak i relacje mam wstępnie wykonane. Listy dzieci, wnucząt etc. również. Jednak nie jest to rekurencja ogonowa...

Wykonane mam przez komendy rodzice(ImieMatki, ImieOjca, ImieDziecka).
 

Problemem chyba jest, że ja nawet nie bardzo wiem, gdzie te rekurencje powstawiać i w jaki sposób.
komentarz 20 marca 2017 przez Raymond.Z Obywatel (1,800 p.)
Samą rekurencje dobrze rozumiesz i wiesz jak wygląda?
komentarz 20 marca 2017 przez aborolabis Nowicjusz (120 p.)
Tyle, co przejrzałam z książek. Czyli prawie nic. Na zajęciach na ten temat było "Tu macie taki fajny kod, przepiszcie, o i zobaczcie czy działa". I nawet do końca nie wiem, co powinno wyjść.
komentarz 20 marca 2017 przez Raymond.Z Obywatel (1,800 p.)
Możesz udostępnić ten kod?

Gdy masz coś iteracją napisane, umiesz to zamienić na rekurencje?
komentarz 20 marca 2017 przez aborolabis Nowicjusz (120 p.)

rodzice(genowefa, warcislaw, bozena).
rodzice(czeslawa, kazimierz, jozef).
rodzice(teodora, andrzej, stanislawa).
rodzice(maria, zygmunt, boleslaw).
rodzice(bozena, jozef, anna).
rodzice(stanislawa, boleslaw, piotr).
rodzice(stanislawa, boleslaw, magda).
rodzice(magda, jedrzej, franek).
rodzice(magda, jedrzej, antek).
rodzice(anna, piotr, iza).
rodzice(anna, piotr, max).
rodzice(anna, piotr, gabriela).

pani(genowefa).
pani(czeslawa).
pani(teodora).
pani(maria).
pani(bozena).
pani(stanislawa).
pani(magda).
pani(anna).
pani(iza).
pani(gabriela).
pan(warcislaw).
pan(kazimierz).
pan(andrzej).
pan(zygmunt).
pan(jozef).
pan(boleslaw).
pan(piotr).
pan(franek).
pan(max).
pan(antek).
pan(jedrzej).

rozne(X, Y) :- not(X=Y).
ojciec(Dziecko, Wnucze):- pan(Dziecko), rodzice(_, Dziecko, Wnucze).
matka(Matka, Wnucze) :- pani(Matka), rodzice(Matka, _, Wnucze).
brat(Brat, Rodzenstwo) :- pan(Brat), matka(Matka, Brat), matka(Matka, Rodzenstwo), rozne(Brat, Rodzenstwo).
siostra(Siostra, Rodzenstwo) :- pani(Siostra), matka(Matka, Siostra), matka(Matka, Rodzenstwo), rozne(Siostra, Rodzenstwo).
zona(Ona, On) :- pani(Ona), rodzice(Ona, On, _).
maz(On, Ona) :- pan(On), rodzice(Ona, On, _).
tesciowa(Tesciowa, Ono) :- pani(Tesciowa), zona(Ono, On), rodzice(Tesciowa, _, On) ; pani(Tesciowa), zona(Ona, Ono), rodzice(Tesciowa, _, Ona).
tesc(Tesc, Ono) :- pan(Tesc), zona(Ono, On), rodzice(_, Tesc, On) ; pan(Tesc), zona(Ona, Ono), rodzice(_, Tesc, Ona).
szwagier(Szwagier, Ono) :- pan(Szwagier), brat(Ojciec, Szwagier), zona(Ono, Ojciec) ; pan(Szwagier), siostra(Matka, Szwagier), zona(Matka, Ono); pan(Szwagier), zona(Matka, Szwagier), brat(Ono, Matka).
szwagierka(Szwagierka, Ono) :- pani(Szwagierka), zona(Ono, Ojciec), siostra(Szwagierka, Ojciec) ; pani(Szwagierka), zona(Matka, Ono), siostra(Szwagierka, Matka) ; pani(Szwagierka), zona(Szwagierka, Ojciec), siostra(Ono, Ojciec).
kuzyn(Kuzyn, Dziecko) :- pan(Kuzyn), brat(Ojciec, Wujek), ojciec(Ojciec, Dziecko), ojciec(Wujek, kuzyn) ; pan(Kuzyn), siostra(Ciotka, Ojciec), matka(Ciotka, Kuzyn), ojciec(Ojciec, Dziecko) ; pan(Kuzyn), brat(Wujek, Matka), matka(Matka, Dziecko), ojciec(Wujek, Kuzyn) ; pan(Kuzyn), siostra(Ciotka, Matka), matka(Ciotka, Kuzyn), matka(Matka, Dziecko).
kuzynka(Kuzynka, Dziecko) :- pani(Kuzynka), brat(Ojciec, Wujek), ojciec(Ojciec, Dziecko), ojciec(Wujek, kuzynka) ; pani(Kuzynka), siostra(Ciotka, Ojciec), matka(Ciotka, Kuzynka), ojciec(Ojciec, Dziecko) ; pani(Kuzynka), brat(Wujek, Matka), matka(Matka, Dziecko), ojciec(Wujek, Kuzynka) ; pani(Kuzynka), siostra(Ciotka, Matka), matka(Ciotka, Kuzynka), matka(Matka, Dziecko).
ciotka(Ciotka, Wnucze) :- pani(Ciotka), brat(Ojciec, Ciotka), rodzice(_, Ojciec, Wnucze) ; pani(Ciotka), siostra(Ciotka, Matka), rodzice(Matka, _, Wnucze).
wujek(Wujek, Wnucze) :- pan(Wujek), brat(Wujek, Ojciec), rodzice(_, Ojciec, Wnucze) ; pan(Wujek), siostra(Matka, Wujek), rodzice(Matka, _, Wnucze).
babcia(Babcia, Wnucze) :- pani(Babcia), rodzice(Babcia,_,Ojciec),rodzice(_,Ojciec, Wnucze) ; pani(Babcia), rodzice(Babcia,_,Matka),rodzice(Matka, _, Wnucze).
prababcia(Prababcia, Wnucze) :- pani(Prababcia), rodzice(Prababcia,_,Dziadek), dziadek(Dziadek, Wnucze) ; pani(Prababcia), rodzice(Prababcia, _, Babcia), babcia(Babcia, Wnucze).
dziadek(Dziadek,Wnucze):- pan(Dziadek), rodzice(_,Dziadek,Ojciec),rodzice(_, Ojciec, Wnucze) ; pan(Dziadek), rodzice(_,Dziadek,Matka),rodzice(Matka, _ , Wnucze).
pradziadek(Pradziadek, Wnucze) :- pan(Pradziadek), rodzice(_,Pradziadek,Dziadek), dziadek(Dziadek, Wnucze) ; pani(Pradziadek), rodzice(_, Pradziadek, Babcia), babcia(Babcia, Wnucze).
przodek(X, Y) :-ojciec(X, Y).
przodek(Przodek, Potomek) :-ojciec(Przodek, X), przodek(X, Potomek).

relacja(X, Y, ojciec) :- ojciec(X, Y).
relacja(X, Y, matka) :- matka(X, Y).
relacja(X, Y, brat) :- brat(X, Y).
relacja(X, Y, siostra) :- siostra(X, Y).
relacja(X, Y, zona) :- zona(X, Y).
relacja(X, Y, maz) :- maz(X, Y).
relacja(X, Y, tesciowa) :- tesciowa(X, Y).
relacja(X, Y, tesc) :- tesc(X, Y).
relacja(X, Y, szwagier) :- szwagier(X, Y).
relacja(X, Y, szwagierka) :- szwagierka(X, Y).
relacja(X, Y, kuzyn) :- kuzyn(X, Y).
relacja(X, Y, kuzynka) :- kuzynka(X, Y).
relacja(X, Y, ciotka) :- ciotka(X, Y).
relacja(X, Y, wujek) :- wujek(X, Y).
relacja(X, Y, babcia) :- babcia(X, Y).
relacja(X, Y, prababcia) :- prababcia(X, Y).
relacja(X, Y, dziadek) :- dziadek(X, Y).
relacja(X, Y, pradziadek) :- pradziadek(X, Y).

rok(1976, magda).
rok(1974, anna).
rok(1940, stanislawa).
rok(1954, bozena).
rok(1911, maria).
rok(1921, teodora).
rok(1915, czeslawa).
rok(1923, genowefa).
rok(1994, iza).
rok(1994, max).
rok(2004, gabriela).
rok(1975, jedrzej).
rok(2005, antek).
rok(1996, franek).
rok(1971, piotr).
rok(1939, boleslaw).
rok(1944, jozef).
rok(1912, zygmunt).
rok(1923, andrzej).
rok(1912, kazimierz).
rok(1910, warcislaw).

zyje(magda).
zyje(anna).
zyje(stanislawa).
zyje(iza).
zyje(max).
zyje(gabriela).
zyje(jedrzej).
zyje(antek).
zyje(franek).
zyje(piotr).
zyje(boleslaw).

starszy(X, Y) :- rok(A, X), rok(B, Y), B>A.
malzenstwo((Ona, On),(Data, Dziecko)) :- rodzice(Ona, On, Dziecko), rok(Data, Dziecko).
wiek(Imie, Wiek) :- rok(Imie, Data), Data is (2017-Y).

lista_dzieci(Ojciec, Lista) :- findall(X, ojciec(Ojciec, X), Lista).
lista_wnuczat(Dziadek, Lista) :- findall(X, dziadek(Dziadek, X), Lista).
lista_babci(Wnucze, Lista) :- findall(X, babcia(X, Wnucze), Lista).
lista_dziadkow(Wnucze, Lista) :- findall(X, dziadek(X, Wnucze), Lista).
lista_przodkow(Przodek, Lista) :- findall(X, przodek(Przodek, X), Lista).
lista_urodzin(Urodziny, Lista) :- findall(X, rok(Urodziny, X), Lista).
lista_mlodszych(Starszy, Lista) :- findall(X, starszy(Starszy, X), Lista).
lista_starszych(Mlodszy, Lista) :- findall(X, starszy(X, Mlodszy), Lista).
lista_dzieci_daty(Ojciec, Lista) :- findall(X, malzenstwo((_, Ojciec), X), Lista).

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 193 wizyt
pytanie zadane 10 stycznia 2016 w Inne języki przez Ywaksal Początkujący (250 p.)
+2 głosów
1 odpowiedź 219 wizyt
pytanie zadane 10 maja 2022 w Rozwój zawodowy, nauka, praca przez maxkolanko1998 Gaduła (3,230 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...