假设我正在编写prolog facts.pl
文件,告诉我软件版本1.1在以下操作系统上升级到软件版本1.2(下面的示例)。
但是在查询时,我对操作系统的整个列表并不感兴趣,并且例如只是想查找是否支持'Solaris 10'
,我该如何编写这样的查询?
upgrades('1.1', ['Windows 2008 SP2', 'Windows 2008 R2', 'Windows 2008 R2 SP1', 'SuSE Linux 10', 'SuSE Linux 11', 'RHEL 5.5', 'RHEL 5.8', 'Solaris 10']).
现在我如何查询是否只能在Solaris 10上升级1.1到1.2?
答案 0 :(得分:0)
Prolog有一个关系数据模型。所以同样的最佳实践'适用于数据设计,就像你在RDBMS中使用的那样(SQL,让我们说)
在可能的情况下,最好在符号和价值观之间建立小而明确的关系,而不是全部包含'作为你正在展示的人。
无论如何,假设你有另一个这样的事实
upgrades('1.2', ['Windows 2008 SP2', 'Windows 2008 R2', 'Windows 2008 R2 SP1', 'SuSE Linux 10', 'SuSE Linux 11', 'RHEL 5.5', 'RHEL 5.8', 'Solaris 10']).
然后?- can_upgrade(OS, From, To).
可能
can_upgrade(OS, From, To) :-
upgrades(From, L1), member(OS, L1),
upgrades(To, L2), member(OS, L2).