我想要制作一个Java程序来帮助人们掌握基本的离散数学(也就是说,检查语句的真值)。要做到这一点,我需要能够检测出用户输入的变量有多少,有什么运算符,还有什么量词(如果有的话) (∃和∀)。有一个很好的算法可以做所有这些事情吗?
让你知道,我不只是想要一个结果,我想要完全控制他们的输入,这样我就可以向他们展示逻辑证明。(因此,将其传递给JavaScript是行不通的)。
发布于 2012-08-27 16:20:28
好吧,所以,你的问题有点模糊,但我想我明白你想做什么:一种教育援助,处理一阶逻辑公式,一步一步地向用户展示如何处理这些公式,对吗?我认为这个想法是有价值的,而且它是完全可行的,即使是一个人的项目,但并不是很容易,而且你必须学习很多新的东西--但它们都是非常有趣的东西,所以即使没有任何结果,你也一定会得到一些有价值的知识。
我建议你从小事做起。我首先构建一个递归下降分析器来识别零阶逻辑公式(一台机器将决定一个公式是否有效,即它接受"A ^ B“,但它拒绝"^ A ^")。接下来,你必须设计出一种存储公式的方法,然后你才能真正地在它上工作。再一次,从小开始:接受有效的零阶逻辑公式(如TRUE AND NOT (TRUE AND FALSE) )并成功地一步一步地将其降为真的小机器已经是人们可以学习的东西,而且编写起来也不难。如果你有冒险精神,加入变量并建立方程:A AND TRUE = TRUE --很容易用缩减和真值表来计算这些。
绑定变量的量词会使事情变得棘手,这就是自动定理证明可能发挥作用的地方;但是,这完全取决于您想要做什么:将转换实现为各种正常形式,并逐步向学生展示过程将相当容易,而且非常有用。
无论如何,我认为这是一个不错的个人项目,你可以从中学到很多东西。如果你在一所大学里,你最终甚至可以得到一些学分。
发布于 2012-08-26 23:57:28
我使用的技术是使用上下文无关语法解析输入字符串。有很多框架可以帮助您完成这一任务,我过去曾亲自使用反将输入字符串解析为分解逻辑树。ANTLR允许您定义一个CFG,您可以映射到Java类型。这允许您映射到数据结构,以存储和计算表达式的真值。当然,您还可以提取数据结构中包含的变量。
https://stackoverflow.com/questions/12134099
复制相似问题