Поиск пар, где разница в возрасте мужа и жены не превышает 5 лет - Prolog
Формулировка задачи:
Мне нужно решить такую задачу.
Найти все пары, где разница в возрасте мужа и жены не превышает 5 лет.
У меня получился такой код, но компилятор ругается. Что я делаю не так?
Листинг программы
- domains
- person = p(string,integer,string,integer).
- predicates
- readperson(person).
- run(char,string,integer,string,integer,string,integer,string,integer).
- do(string,integer,string,integer).
- clauses
- readperson(p(Name,Age,Name1,Age1)) :- write("Name: "), readln(Name),
- write("Age: "), readint(Age),
- write("Name1"),readln(Name1),write("Age1"),readint(Age1), nl.
- run('y',Name,Age,Name1,Age1,X,Y,X1,Y1) :- readperson(p(_,Age,_,Age1)),abs(Age-Age1)<=5,
- write("Enter now? (y/n): "),
- readchar(Ch),run(Ch,_,_,_,_,X,Y,X1,Y1),!.
- run(_,_,Age,_,Age1,X,Y,X1,Y1).
- do(Name,Age,Name1,Age1) :- write("Enter now? (y/n): "),
- readchar(Ch),run(Ch,Name,Age,Name1,Age1,X,Y,X1,Y1).
- goal
- do(Name,Age,Name1,Age1),write(Name,Age,Name1,Age1),nl,fail.
Кстати, компилятор ругается на строке 11 перед Name. Пишет такую ошибку:708 Warning:The variable is not this clause.
Решение задачи: «Поиск пар, где разница в возрасте мужа и жены не превышает 5 лет»
textual
Листинг программы
- domains
- list=integer*.
- person=p(string,integer,string,integer).
- predicates
- readperson(person).
- run(char,list).
- do(person).
- clauses
- readperson(p(Name,Age,Name1,Ag1)):-write("Name:"), readln(Name),
- write("Age"),readint(Age),
- write("Name1"),readln(Name1),
- write("Age1"),readint(Age1).
- run('y',[p(_,A,_,A1)]):-readperson(p(_,A,_,A1)),abs(A-A1)<=5,
- write("Read now&(y/n):"),
- readchar(Ch),run(Ch,[H]),!.
- do(p(M,N,M1,N1)):-write("Enter now&(y/n):"),
- readchar(Ch),run(Ch,p(_,A,_,A1)).
- do(p(M,N,M1,N1)),write(p(M,N,M1,N1)).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д