Пролог поиск по тому же полю в списке
У меня есть БД с такой структурой
my_family( person("FN","SN", unempl(), 20),
person("FN2","SN", work("Soft", 200), 30),
[person("FN3","SN", work("HP" , 10), 13),
person("FN4","SN", work("LP", 200), 1),
person("FN5","SN" , work("qwerty", 300), 1)]).
domains
family = person*.
person = person(string Name, string LastName, work, integer Age).
work = work(string Corp, real Salary)
Как мне получить семью, с детьми того же возраста?
я попробую
clauses
length_of([], 0).
length_of([_|T], L):-
length_of(T, TailLength),
L = TailLength + 1.
....
my_family(person(_, _, _, FA), person(_, _, _, MA), Child),
getName(Child).
getName([]).
getName([person(N, S, _, AC)|T]):-
findall(1, _=person(_, S, _, AC), L),
length_of(L, LN),
2 <= LN,
stdIO::writef("Family: %\n\n\n", S),
getName(T).
Но это не работает, похоже, что findall возвращает список L только с одним элементом.
1 ответ
Я думаю, что вы должны оставить AC в Findall
findall(1, _=person(_, S, _, _), L),
в противном случае список ограничен людьми того же возраста, что и текущий человек. Отказ от ответственности: я не могу протестировать этот код, и его синтаксис очень нестандартен: в ISO Prolog, findall/3 работает без _=person(...), но это может быть особенностью визуального пролога, который мне неизвестен