Найти все семьи имеющие детей - Prolog
Формулировка задачи:
вот программа рабочая найти все семьи не имеющие детей
Листинг программы
- domains
- child=string*
- name,fami,otch=string
- man,woman=s(name,fami,otch)
- fam=f(man,woman,child)
- slist=fam*
- predicates
- family(fam)
- vvodFamily(fam)
- vvod(slist, slist)
- dobavElSpisok(child,child)
- reshenie(slist)
- bezchilFamily(fam,slist)
- prinad(fam,slist)
- findFam(slist,slist)
- clauses
- family(f(s("Ivan","Sidorov","Ivanovich"),s("Mariya","Ivanova","Viktorovna"),["Kolya"])).
- family(f(s("Petr","Ivanov","Stepanovich"),s("Nina","Ivanova","Olegovna"),["Pavel","Irina"])).
- family(f(s("Anatoliy","Kolesnikov","Maratovich"),s("Juliya","Kolesnilova","Damirovna"),[])).
- family(f(s("Timur","Kharisov","Ildarovic"),s("Evgeniya","Kharisova","Sergeevna"),["Stepan"])).
- family(f(s("Pavel","Kondrashov","Anatolevich"),s("Aleksandra","Kondrashova","Nikolaevna"),[])).
- vvod(L1,L2):-write("Do you want to add new family? (y/n)"), readchar(C),nl, C='y',!, vvodfamily(Z), vvod([Z|L1],L2).
- vvod(L1,L1).
- vvodFamily(f(s(X,Y,Z),s(X1,Y1,Z1),L)):-write("Vvedite father's name:"),readln(X),write("vvedite father's sirname:"),readln(Y),write("vvedite father's otchestvo:"),readln(Z),nl,
- write("Vvedite mother's name:"),readln(X1),write("vvedite mother's sirname:"),readln(Y1),write("vvedite mother's otchestvo:"),readln(Z1), dobavElSpisok([],L),!.
- vvodFamily(f(s(X,Y,Z),s(X1,Y1,Z1),L)):-write("Oshibka vvoda. Povtorite"), readln(_),vvodFamily(f(s(X,Y,Z),s(X1,Y1,Z1),L)).
- dobavElSpisok(L1,L2):-write("Budete vvodit detei(y/n)?"), readchar(C), nl, C='y',write("vvedite name:"),readln(Z), dobavElSpisok([Z|L1],L2).
- dobavElSpisok(L,L).
- reshenie(LL):-findall(Q,family(Q),L0), vvod(L0,L1), findFam(L1,LL).
- bezchilFamily(f(X,Y,L1),L):-L1=[],prinad(f(X,Y,L1),L).
- prinad(X,[X|L1]).
- prinad(X,[X1|L1]):-prinad(X,L1).
- findFam(L1,L2):-findall(Q,bezchilfamily(Q,L1), L2).
как переделать чтобы искала имеющие детей
Решение задачи: «Найти все семьи имеющие детей»
textual
Листинг программы
- bezchilFamily(f(X,Y,L1),L):-L1=[_],prinad(f(X,Y,L1),L).
- bezchilFamily(f(X,Y,L1),L):-L1=[_,_],prinad(f(X,Y,L1),L).
- bezchilFamily(f(X,Y,L1),L):-L1=[_,_,_],prinad(f(X,Y,L1),L).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д