【发布时间】:2012-05-14 06:39:14
【问题描述】:
我遇到了一个有趣的小问题,我遇到了这样的逻辑子句:
Rule 1. A, B and C are unique, and are numbers from 1 to 3 (so every number is used).
Rule 2. B < 2
Rule 3. C > 2
现在(假设我刚刚提出的这个快速示例实际上验证了 :P),很容易看到
A = 2
B = 1
C = 3
但这是一个非常人为的例子。
如果你有 20 条(或一万条)规则,它们重叠了怎么办?假设有一个有效的单一答案,并且您可以以某种方式访问规则(例如谓词列表)。
是否有一个很好的、通用的、直观的解决方案?我知道 Prolog 可以使用某些库来解决它,但我的尝试证明是徒劳的。我知道我可以蛮力排列范围内的所有数字,然后手动检查它们是否符合规则。但这似乎很蹩脚。
【问题讨论】:
-
谓词的形式是否有任何限制,或者它们完全是任意的?
-
我猜他们是任意的。但是它们必须是有用的 - 即没有约束应该限制另一个也已经这样做的地方。
-
您可能对 Styla 感兴趣,这是一个基于 Scala 的轻量级 Prolog 解释器,可从:code.google.com/p/styla
标签: scala logic predicate logic-programming