Что ж, я немного новичок в Прологе, поэтому мой вопрос касается шаблона/логики Пролога.
У меня отношения под названием планшет. У него много параметров, таких как имя, OperationSystem, ramCapacity и т. д. У меня есть много объектов/предикатов этого отношения, например
tablet(
name("tablet1"),
operatingSystem("ios"),
ramCapacity(1024),
screen(
type("IPS"),
resolution(1024,2048)
)
).
tablet(
name("tablet2"),
operatingSystem("android"),
ramCapacity(2048),
screen(
type("IPS"),
resolution(1024,2048),
protected(yes)
),
isSupported(yes)
).
И некоторые другие подобные отношения, НО с другим количеством параметров. Некоторые атрибуты в разных объектах мне не нужны ИЛИ я создал несколько планшетов, и однажды добавил еще одно поле и начал использовать его в новых планшетах.
Есть два вопроса:
- Мне нужно использовать максимально гибкую структуру в прологе. У некоторых планшетов есть атрибуты/внутренние предикаты, а у некоторых нет, но все они планшеты.
- Мне нужно получить доступ к данным самым простым способом, например, найти все планшеты с ramCapacity (1024), не включая те, которые не имеют этого атрибута.
- Мне нужно изменить значения некоторых атрибутов самым простым способом. Например запрос - измените ramCapacity на 2048 для планшета с именем "tablet1".
- Если это возможно, это должно быть красиво читать в текстовом редакторе :)
Является ли эта структура гибкой? Должен ли я использовать другой? Нужны ли мне дополнительные правила для управления этой структурой? Легко ли изменить эту структуру с помощью запроса? (Я храню эту структуру в файле).
?- tablet(Ts0), member(operating_system=android, Ts0), select(screen=screen(Scs0), Ts0, Ts1), select(resolution=_, Scs0, Scs1), Ts = [screen=screen([resolution=res(2048,2048)|Scs1])|Ts1].
, получая какTs
обновленный список атрибутов. Добавлениеportray_clause(tablet(Ts))
в конце выводит его таким образом, что он может легко заменить предыдущее определение этого элемента. 17.02.2015