好吧,我对Prolog有点新意,所以我的问题是关于Prolog模式/逻辑。
我有一种叫平板电脑的关系。它有许多参数,例如name,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)
).
和其他一些类似的关系,但有不同数量的参数。我不需要的不同对象中的一些属性或者我创建了一些平板电脑,并且有一天添加了一个字段并开始在新平板电脑中使用它。
有两个问题:
这种结构是否灵活?我应该再用一个吗?我是否需要其他规则来操纵此结构?这种结构是否容易随查询而改变?(我将此结构保存在文件中)。
答案 0 :(得分:3)
由于属性数量不固定且需要如此灵活,因此请考虑将这些项目表示为选项列表,如下所示:
tablet([name=tablet1,
operating_system=ios,
ram_capacity=1024,
screen=screen([type="IPS",
resolution = res(1024,2048)])]).
tablet([name=tablet2,
operating_system=android,
ram_capacity=2048,
screen=screen([type="IPS",
resolution = res(1024,2048)]),
is_supported=yes]).
您可以轻松查询和任意扩展此类列表。例如:
?- tablet(Ts), member(name=tablet2, Ts).
Ts = [name=tablet2, operating_system=android, ram_capacity=2048, screen=screen([type="IPS", resolution=res(..., ...)]), is_supported=yes] ;
false.
另请注意常见的Prolog naming_convention_to_use_underscores_for_readability
,而不是mixingCasesAndMakingEverythingExtremelyHardToRead
。