- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题:符号表达式操作。
在 +、-、*、/、min、max 等运算符的帮助下,从整数常量和变量开始构建符号表达式。更准确地说,我会用以下方式表示一个表达式(Caml 代码):
type sym_expr_t =
| PlusInf
| MinusInf
| Const of int
| Var of var_t
| Add of sym_expr_t * sym_expr_t
| Sub of sym_expr_t * sym_expr_t
| Mul of sym_expr_t * sym_expr_t
| Div of sym_expr_t * sym_expr_t
| Min of sym_expr_t * sym_expr_t
| Max of sym_expr_t * sym_expr_t
我想,为了执行有用且高效的计算(例如 a + b - a = 0 或 a + 1 > a),我需要某种范式并对其进行运算。上面的表示可能效果不太好。
有人能指出我应该如何处理这个问题吗?我不需要代码。如果我知道怎么做,那可以很容易地写出来。提供范式表示和/或构造/简化/比较算法的论文链接也会有所帮助。
此外,如果您知道可以执行此操作的 Ocaml 库,请告诉我。
最佳答案
如果你去掉 Min
和 Max
,范式很简单:它们是你变量的分数域的元素,我的意思是 P[ Vars]/Q[Vars]
其中 P
、Q
是多项式。对于 Min 和 Max,我不知道;我想最简单的方法是将它们视为 if/then/else 测试,并使它们 float 到表达式的顶部(在此过程中复制内容),例如 P(Max(Q,R))
将被重写为 P(if Q>R then Q else R)
,然后在 if Q>R then P(Q) else P(R)
.
我知道有两种不同的方法可以找到表达式的范式 expr
:
定义符合您直觉的重写规则 expr -> expr
,并表明它们正在规范化。这可以通过引导您知道正确的方程式来完成:从 Add(a,Add(b,c)) = Add(Add(a,b),c)
您将导出 Add(a,Add(b,c)) -> Add(Add(a,b),c)
或相反。但是你有一个方程系统,你需要展示 Church-Rosser 和归一化;确实是肮脏的生意。
采用更语义化的方法来为您的值提供“语义化”:expr
中的元素实际上是存在于 sem< 类型中的数学对象的符号
。为 sem
的对象找到一个合适的(唯一的)表示,然后是一个评估函数 expr -> sem
,最后(如果你愿意,但你不需要)例如用于相等性检查)具体化 sem -> expr
。两种转换的组合自然会为您提供一个规范化过程,而不必担心例如 Add 重写的方向(您的具体化功能会自然地产生一些任意选择)。例如,对于多项式分数,语义空间将类似于:
.
type sem = poly * poly
and poly = (multiplicity * var * degree) list
and multiplicity = int
and degree = int
当然,这并不总是那么容易。我不知道用 Min 和 Max 函数赋予语义空间什么表示。
编辑:关于外部库,我不知道,我不确定是否有。您也许应该寻找与其他符号代数软件的绑定(bind),但我还没有听说过(几年前有一个 Jane Street Summer Project,但我不确定是否产生了任何可交付成果)。
如果您需要将其用于生产应用程序,也许您应该直接考虑自己编写绑定(bind),例如。到 Sage 或 Maxima。我不知道那会是什么样子。
关于algorithm - 符号计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5744833/
SQL 和一般开发的新手,我有一个表(COUNTRIES),其中包含字段(INDEX、NAME、POPULATION、AREA) 通常我添加一个客户端(Delphi)计算字段(DENSITY)和 On
我想使用 calc(100%-100px),但在我的 demo 中不起作用由于高度只接受像素,因此如何将此百分比值转换为像素。 最佳答案 以下将为您提供高度: $(window).height();
我正在尝试在 MySQL 中添加列并动态填充其他列。 例如我有一张表“数字”并具有第 1 列、第 2 列、第 3 列,这些总数应填充在第 4 列中 最佳答案 除非我误解了你的问题,否则你不只是在寻找:
我想返回简单计算的结果,但我不确定如何执行此操作。我的表格如下: SELECT COUNT(fb.engineer_id) AS `total_feedback`, SUM(fb.ra
我一直在尝试做这个程序,但我被卡住了,我仍然是一个初学者,任何帮助将不胜感激。我需要程序来做 打印一个 10 X 10 的表格,其中表格中的每个条目都是行号和列号的总和 包含一个累加器,用于计算所有表
这个计算背后一定有一些逻辑。但我无法得到它。普通数学不会导致这种行为。谁能帮我解释一下原因 printf ("float %f\n", 2/7 * 100.0); 结果打印 1.000000 为什么会
我想计算从 0 到 (n)^{1/2} - 1 的数字的 AND每个数字从 0 到 (n)^{1/2} - 1 .我想在 O(n) 中执行此操作时间,不能使用 XOR、OR、AND 运算。 具体来说,
如何在 Excel 中将公式放入自定义数字格式?例如(出于说明目的随机示例), 假设我有以下数据: 输入 输出 在不编辑单元格中的实际数据的情况下,我想显示单元格中的值除以 2,并保留两位小数: 有没
每次我在 Flutter 应用程序中调用计算()时,我都会看到内存泄漏,据我所知,这基本上只是一种生成隔离的便捷方法。我的应用程序内存占用增加并且在 GC 之后永远不会减少。 我已将我的代码简化为仅调
我有数字特征观察 V1通过 V12用于目标变量 Wavelength .我想计算 Vx 之间的 RMSE列。数据格式如下。 每个变量“Vx”以 5 分钟的间隔进行测量。我想计算所有 Vx 变量的观测值
我正在寻找一种使用 C 语言计算文件中未知字符数的简单方法。谢谢你的帮助 最佳答案 POSIX 方式(可能是您想要的方式): off_t get_file_length( FILE *file ) {
我正在使用 Postgres,并且我正试图围绕如何在连续日期跨度中得出第一个开始日期的问题进行思考。例如 :- ID | Start Date | End Date =================
我有一个订单表格,我在其中使用 jQuery 计算插件来汇总总数。 此求和工作正常,但生成的“总和”存在问题。总之,我希望用逗号替换任何点。 代码的基础是; function ($this) {
我在使用 double 变量计算简单算术方程时遇到问题。 我有一个具有 double 属性 Value 的组件,我将此属性设置为 100。 然后我做一个简单的减法来检查这个值是否真的是 100: va
我在这里看到了一些关于 CRC 32 计算的其他问题。但没有一个让我满意,因此是这样。 openssl 库是否有任何用于计算 CRC32 的 api 支持?我已经在为 SHA1 使用 openssl,
当我在PHP日期计算中遇到问题时,我感到惊讶。 $add = '- 30 days'; echo date('Y-m-01', strtotime($add)); // result is 2017-
我正在使用 javascript 进行练习,我编写了这个脚本来计算 2 个变量的总和,然后在第三个方程中使用这个总和!关于如何完成这项工作的任何想法都将非常有用! First Number:
我有一个来自EAC的提示单和一个包含完整专辑的FLAC文件。 我正在尝试制作一些python脚本来播放文件,因为我需要能够设置在flac文件中开始的位置。 如何从CueSheet格式MM:SS:FF转
这个问题已经有答案了: Adding two numbers concatenates them instead of calculating the sum (24 个回答) 已关闭去年。 我有一个
4000 我需要上面字段 name="quantity" 和 id="price" 中的值,并使用 javascript 函数进行计算,并将其显示在字段 id= 中仅当我单击计算按钮时才显示“总
我是一名优秀的程序员,十分优秀!