java - 如何解析 Java 中的基本离散数学语句?

标签 java regex algorithm parsing discrete-mathematics

我想制作一个Java程序来帮助人们进行基本的离散数学(也就是说,检查语句的真值)。为此,我需要能够检测用户输入的变量数量、有哪些运算符以及有哪些量词(如果有)(∃ 和 ∀)。 是否有一个好的算法可以完成所有这些事情?

想让你知道,我不只是想要一个结果;我想要的是结果。我想完全控制他们的输入,这样我就可以向他们展示逻辑证明。 (因此将其传递给 JavaScript 之类的操作是行不通的)。

最佳答案

好吧,你的问题有点模糊,但我想我明白你想要做什么:一种处理一阶逻辑公式的教育辅助工具,逐步向用户展示如何使用这些公式, 正确的?我认为这个想法是有值(value)的,而且它是完全可行的,即使作为一个人的项目也是如此,但这并不是一件容易的事,你必须学习很多新东西——但它们都是非常有趣的东西,所以即使什么也没有得到,你也一定会获得一些有值(value)的知识。

我建议你从小事做起。我首先构建一个 recursive descent parser 识别零阶逻辑公式(机器可以决定公式是否有效,即它接受“A ^ B”但拒绝“^ A ^”)。接下来你必须设计a way to store the formula ,然后你就可以实际工作了。话又说回来,从小处开始:一台接受有效零阶逻辑公式的小机器,例如 TRUE AND NOT (TRUE AND FALSE) ,并成功一步步还原为true已经是可以让人借鉴的东西了,而且写起来也不算太难。如果您喜欢冒险,请添加变量并建立方程式:A AND TRUE = TRUE -- 使用归约和真值表很容易解决这些问题。

对于绑定(bind)变量的量词,事情会变得棘手,这就是 Automated theorem proving 的地方。可能会发挥作用;但是,这完全取决于您想要做什么:将转换实现为各种范式,并向学生逐步展示该过程将相当容易,而且相当有用。

无论如何,我认为这是一个不错的个人项目,你可以从中学到很多东西。如果您在大学,您最终甚至可以获得一些学分。

关于java - 如何解析 Java 中的基本离散数学语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134099/

相关文章:

css - 用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式

Java删除不删除

java - Android 修改 Zip 文件

javascript - 如何计算javascript中字符串中的空行

javascript - 如何使用正则表达式和 JavaScript 获取相邻匹配?

c++ - 使用 glFrustum 改变坐标

Java 数据包嗅探器

java - 来自同一实体的多个外键? (JPA hibernate )

计算以下 C 代码中每个语句的频率计数

algorithm - 防止零和博弈中的遗传算法合作