Maxima 中 Maple“unapply”或 Mathematica“Function”的模拟

2024-02-04

在 Wolfram Mathematica 中,我们可以定义作用于函数(即返回函数的函数)的运算符,例如至于下面示例中作用于两个参数的函数的第一个参数的乘法运算符

X[f_] = Function[{x, y}, x*f[x, y]]

然后我们可以将此运算符应用于具有任意 2 个参数的任何函数

In[2]:= X[g][z, t]

Out[2]= z g[z, t]

Maple中有类似的结构

X:=proc(f) option operator; local x,y;

unapply(x*f(x,y),x,y)

end;

与类似的应用方式

> X(g)(z,t);

  z g(z, t)

在千里马我尝试过这个

X(f):=lambda([x,y],x*f(x,y));

但当尝试应用它时我得到

(%i5) X(g)(z,t)

(%o5) z*f(z,t)

所以,当我使用 lambda 时,看起来 f 没有被识别为函数 X 的参数。

有什么办法可以解决这个问题吗?

对于 Maple 和 Mathematica,这种类型的运算符对使用线性微分运算符进行操作有很大帮助


Maxima lambda不评估其体内的任何表达式,因此f不进行评估(至g)。这就是您所看到的行为。我认为这样做的动机是lambdabody 可能包含在某些变量具有值之前不会产生预期效果的表达式,例如length, for ..., print, etc.

您可以通过替换到正文中来获得预期的行为。这里有两种方法可以做到这一点。第一个使用函数subst我认为这可能是最明显的。

(%i1) X(f):= subst ('f = f, lambda([x,y],x*f(x,y)));
(%o1)   X(f) := subst('f = f, lambda([x, y], x f(x, y)))
(%i2) X(g);
(%o2)               lambda([x, y], x g(x, y))
(%i3) X(g)(z, t);
(%o3)                       z g(z, t)

第二个使用函数buildq这实际上是一个替换函数,它引用(不计算)要替换的表达式。

(%i4) X(f) := buildq ([f], lambda ([x, y], x*f(x, y)));
(%o4)    X(f) := buildq([f], lambda([x, y], x f(x, y)))
(%i5) X(g);
(%o5)               lambda([x, y], x g(x, y))
(%i6) X(g)(z, t);
(%o6)                       z g(z, t)

最后,如果你有兴趣创作lambda更频繁地使用求值表达式的表达式,您可以为此创建您自己的 lambda。我会称之为evlambda here.

(%i11) evlambda (a, b) := apply (lambda, [a, b]);
(%o11)         evlambda(a, b) := apply(lambda, [a, b])
(%i12) X(f) := evlambda ([x, y], x*f(x, y));
(%o12)           X(f) := evlambda([x, y], x f(x, y))
(%i13) X(g);
(%o13)                lambda([x, y], x g(x, y))
(%i14) X(g)(z, t);
(%o14)                        z g(z, t)

这里的关键是evlambda被定义为普通函数,因此对其参数进行求值。所以到时候lambda被申请;被应用,b已被评估,因此它包含g.

请注意,这evlambda不会做任何有用的事情length, for ..., and print,这是可以预料的。

(%i15) foo : evlambda ([l], 1 + length(l));
length: argument cannot be a symbol; found l
 -- an error. To debug this try: debugmode(true);
(%i16) bar : evlambda ([n], for i thru n do print (i));
Unable to evaluate predicate 1 > n
 -- an error. To debug this try: debugmode(true);
(%i17) baz : evlambda ([x], print (x));
x
(%o17)                    lambda([x], x)
(%i18) baz(5);
(%o18)                           5     

最后一张,与print, 评估print when baz被定义(所以x是输出),但是当baz(5)被评估——这种行为是可以预料的,因为evlambda评估其论点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maxima 中 Maple“unapply”或 Mathematica“Function”的模拟 的相关文章

  • 使用 SpringBootRequestHandler 访问函数内部的 AWS Lambda 上下文?

    我需要访问我的 lambda 函数的 AWS Lambda 上下文 我在用SpringBootRequestHandler接收请求 应该调用实现 Function 接口的类 下面是这两个类的代码示例 public class A exten
  • Typescript 在 Pick 实现中进行了扩展

    这是 Typescript 的基本实现Pick实用程序类型来自本教程 https learntypescript dev 09 l3 condition utility types type ObjectWithKeys
  • Angular 2 / 4 / 5 - 提前编译如何

    我正在尝试按照本指南引导我的 Angular 2 RC5 应用程序https angular io docs ts latest guide ngmodule html https angular io docs ts latest gui
  • JSF 中的 class 和 styleClass 属性有什么区别?

    我发现 在 JSF 中 大多数标准组件都映射到 HTML 标签 例如
  • 拆分数据库是合法的安全措施吗?

    当我公司以前的开发人员必须存储敏感的用户数据 例如医疗记录 时 他们做了以下操作 我怀疑它的优点 有些数据被认为是 不敏感 用户登录 个人资料信息 和 敏感 用户医疗记录 共有三个数据库 中的不敏感数据A 医疗记录在B 以及之间的映射A a
  • 使用 Web 服务将报价导入 vtiger crm

    我需要将报价导入到vtiger 我发现可以使用 vtiger Web 服务 API 来完成 我找到了参考手册 https wiki vtiger com archives index php vtiger510 Webservice ref
  • 在 shell 脚本中转义单引号

    我需要转义变量中的单引号 ssh command file hostname server setup date Y m d tar gz cd var tar zcvf file ini wc l xargs printf Num fil
  • 如何在不重新启动 MySQL 的情况下刷新 Performance_schema 统计信息?

    我知道性能模式中的统计数据在 MySQL 重新启动后不会持续存在 我想在不重新启动 MySQL 的情况下刷新所有统计信息 有什么办法可以做到吗 Thanks 截断每个单独的表更容易的是调用以下过程 CALL sys ps truncate
  • 如何编写可读的 JavaScript

    在 JavaScript 中 代码格式化的标准规则似乎并没有解决这个问题 你最终还是会陷入混乱 到处都是 我不相信我什至不知道正确缩进声明为其他函数的参数的匿名函数的既定规则 简而言之 我在阅读自己的 JavaScript 时遇到了困难 而
  • 如何在 Oracle 包中执行私有过程?

    这是我第一次尝试创建一个包 所以我一定错过了一些非常明显的东西 我在谷歌上搜索过的东西似乎都不认为值得一提 显然 如果包体中有未包含在规范部分中的过程 那么这些过程就是私有的 我遇到的问题是我似乎不知道如何参考那些私人包裹一旦我做好了 而且

随机推荐

  • 实体包装器 - 自定义

    我想找到一种解决方法来完成一个简单的解决方案 以便通过 EF 自动执行某些操作 我需要的是在保存和检索过程中接管以修改查询结果 但此类将能够使其适用于任何类型的实体 示例 我有一个 MyTestDb 因此 在我的 C 项目中 我创建了一个新
  • 无法更改 Android 中的导航抽屉图标颜色

    好吧 我知道这是一个微不足道的问题 但由于某种原因它对我不起作用 我已经做了很多其他答案中建议的事情 但都是徒劳的 我的可绘制文件夹有白色图标 我什至尝试从 styles xml 更改它 但这也不起作用 我正在我的棒棒糖设备上测试它 任何帮
  • 使用 `` 或 `@import` 包含 CSS - 哪个更好?

    我有一个网站 并且有多个用于打印 电视 屏幕 手持设备等的 css 样式表 我想知道这些方法中哪一种更好用 性能 可用 性等 or
  • 正则表达式问题组名称重新定义?

    所以我有这个正则表达式 s P
  • 线串长度(以英里为单位)

    我将运行数据表示为 Shapely LineStrings 其中 LineString 中的每个点都是一个坐标 我试图计算出以英里为单位的 LineString 长度 我知道 LineString 有一个length方法 但我不知道结果是什
  • 从 Spring Boot jar 文件运行非主类

    我有一个 spring boot jar 文件 里面有一个清单文件 如下所示 Manifest Version 1 0 Implementation Title myApp Implementation Version 0 1 Built
  • delphi中如何分割字符串

    我只需要分割一个字符串 例如 STANS Payment chk 1 1210 000进入一个基于数组 字符串列表中的结果将是 STANS Payment chk 1 1210 000 创建一个TStringList并将逗号分隔的字符串分配
  • 从订单示例构建订单簿[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找从订单构造订单簿的代码 例如 如果订单是 side price quantity buy 100 1 buy 101 10 buy
  • gcc中有128位整数吗?

    我想要一个 128 位整数 因为我想存储两个 64 位数字相乘的结果 gcc 4 4及以上版本有这样的东西吗 对于 C23 之前的 GCC 原始 128 位整数类型是仅在 64 位目标上可用 因此即使您已经检测到最新的 GCC 版本 您也需
  • 在事件处理程序中调用自定义挂钩

    我有一个名为的自定义钩子useFetchMyApi将 fetch 调用包装到 API 端点 函数钩子接受一个参数 并将其包含在帖子正文中 数据数组输出取决于钩子参数 在UI上 App组件调用useFetchMyApi一次 按钮单击处理程序将
  • 包含相同对象列表的对象的实体框架映射

    目前在我的代码中我正在做这样的事情 public class Subject private List
  • FLOPS 什么是真正的 FLOPS

    我来自这个线程 FLOPS Intel 核心并使用 C 语言对其进行测试 内积 https stackoverflow com questions 1536867 flops intel core and testing it with c
  • 将多个 div 与父级底部对齐

    我想将父级底部的 3 个 div 与100 height I tried parent height 100 display table cell vertical align bottom 但不起作用 即使您更改窗口的大小或分辨率 它也应
  • Android Studio Canary 2020.3.1:Kotlin 未解析的引用

    将 Android Studio Canary 版本更新到 3 1 后 我开始收到属于 kotlin 标准库的函数的 Kotlin 未解析引用 并且该问题似乎也影响了 Android Studio 导入正确库的能力 我相信我的问题类似于th
  • 为什么 null 不 in(1,2,3) false [重复]

    这个问题在这里已经有答案了 是否期望当我测试空值时not在列表中 结果始终为 false 那是 select Hello world where null not in 1 2 3 不要选择任何内容 因为 null not in 1 2 3
  • pycrypto 和 Google 应用引擎

    如何将 pycrypto 与 GAP 结合使用 It says here https developers google com appengine docs python tools libraries它不支持最新版本 这是否意味着我必须
  • 如何将值从子功能组件传递到父类组件?

    我有一个父类组件和一个子功能组件 我们如何将值从这种类型的子组件传递到父组件 我见过一些将值从子类组件传递到父类组件的示例 父组件 import React from react import ChildComponent from Chi
  • Heroku 上的 Resque 后台作业

    我在 Heroku 上遇到了一个非常奇怪的问题 我已经花了一段时间来解决这个问题 我的应用程序有一些外部 API 调用和邮件程序 我已将它们设置为在后台运行 ActiveJob 在 Heroku 上 我设置了两个工作人员 并且我正在使用 R
  • 如何在 Eclipse 中格式化 html 文件?

    XML 格式工作得很好 但 html 格式却不行 事实上 如果我对 html 文件使用 cmd shift F 它几乎会左对齐所有内容 我附上了之前和之后的照片 有谁知道如何解决这一问题 我尝试了 HTML 格式首选项 但没有成功 请注意
  • Maxima 中 Maple“unapply”或 Mathematica“Function”的模拟

    在 Wolfram Mathematica 中 我们可以定义作用于函数 即返回函数的函数 的运算符 例如至于下面示例中作用于两个参数的函数的第一个参数的乘法运算符 X f Function x y x f x y 然后我们可以将此运算符应用