Следующая простая программа Prolog представляет, благодаря использованию структуры данных, семья состоит из мужа, жены и детей списка:Простые данные структуры
family(
person(bob, smith, date(7,may,1968), 30000),
person(ann, smith, date(18,july,1970), 32000),
[person(dave, smith, date(1,june,1984), 0),
person(edna, smith, date(25,may,1990), 0)]
).
family(
person(mario, rossi, date(7,may,1968), 30000),
person(lucia, verdi, date(18,july,1970), 32000),
[person(luca, rossi, date(1,june,1984), 0),
person(maria, rossi, date(25,may,1990), 0),
person(paolo, rossi, data(16, april, 1980), 10000)]
).
family(
person(carlo, bianchi, date(7,may,1968), 30000),
person(flavia, blabla, date(18,july,1970), 32000),
[person(figlio1, bianchi, date(1,june,1984), 0),
person(figlio2, bianchi, date(25,may,2001), 0),
person(figlio3, bianchi, data(16, april, 1980), 10000),
person(figlio4, bianchi, data(10, april, 1978), 20000)]
).
family(
person(no, no, date(7,may,1968), 30000),
person(no, no, date(18,july,1970), 32000),
[]
).
/* Regola che mostra i mariti: */
husband(X) :- family(X,_,_).
/* Regola che mostra l mogli: */
wife(X) :- family(_,X,_).
/* Regola che mostra i figli:
X è figlio se in una famiglia c'è una lista di figli e se X appartiene
alla lista dei figli: */
child(X) :- family(_,_,Children),
member(X,Children).
Это очень просто. По некоторым фактам я представляю некоторую семью, и у меня есть какое-то правило для выполнения какого-либо запроса (для получения мужей, жен, если Х является ребенком в семье, если человек существует в семье, зарплата человека и дата о рождении человека)
Хорошо, до сих пор у меня нет проблем.
Тогда я следующее упражнение, связанные с предыдущей программой: Написать правило, чтобы получить все семьи, которые не имеют ребенка
Моя идея в том, что семья не имеет ни одного ребенка, если список детей пустой список. Получить семью, не ребенок значит показать муж и жена имена этих семей и я решаю, что добавление этого правила к предыдущей программе:
nochildren(X,Y) :- family(X,Y,[]).
Это работает, но я не знаю, если это чистое решение потому что пользователь (выполняющий запрос в оболочке Prolog) должен знать, что X представляет имя мужа и что Y представляет имя жены.
Есть ли лучшие решения?
@reinierpost: Почему это лучшее название? – false
@false: это, по крайней мере, несколько специфично. настоящий заголовок может означать почти что угодно в программировании. – reinierpost
@reinierpost: Он не имел абсолютно никакого отношения к содержанию сообщения. – false