你猜D[E[x], x]会输出啥?——兼交流滥用内置符号可能导
mathematica吧
全部回复
仅看楼主
吧务
level 15
xzcyr 楼主
致的有趣问题。
“别随便拿内置函数/符号当变量名”——Mathematica教程里一般都会带一句类似的话,这句话是这么的理所应当,似乎没什么好多说的,可是,如果稍加思考,就会发现事情似乎没这么简单:为什么我们不能拿内置函数/符号当变量名?如果这么干了,会导致什么问题?
比较容易想到的一种情况是:内置符号基本上都有Protected属性,因此诸如C=1的赋值默认情况下会失败。
可是除此之外呢?
我标题里所说的,就是其中之一:
好了,废话了半天其实就是想把上面这个发现拿出来现一现。大家要是还知道其他类似的例子也可以拿来说说。躺。
2022年05月06日 17点05分 1
level 4
[真棒][真棒]
2022年05月30日 07点05分 2
吧务
level 15
xzcyr 楼主
帖子
https://tieba.baidu.com/p/7902772719
里出现了一个有趣的例子,滥用 _ 进行变量命名后Reduce求解失败了。代码备份:
Reduce[(2 Ndab vin \[CurlyPhi]s^2 (vo vin_max - vin_min) vo_dab^2)/(
R (vin_max - vin_min) vin_min (vin - Ndab vo_dab)) ==
1, \[CurlyPhi]s]
2022年07月02日 02点07分 3
一个简化样本:Reduce[x^2 == f_a f, x]
2022年07月02日 04点07分
吧务
level 15
xzcyr 楼主
近期又发现了一个有趣的例子:
Function[Null, Null]
大家猜 Function[Null, Null][aaaaaa] 会输出啥?
这个现象的原因,是“Function的第一参数为Null”是一种特殊语法。这一语法在较新版本的自带帮助中已被写入Function的“更多信息”部分。(具体哪版加入的我没仔细查,反正版本9没有。)
2023年09月02日 02点09分 5
这个特殊语法的主要用途,是给使用了 #
# 的纯函数加属性:Function[, ffff[#
#], Listable]@{12, 5, 6}
2023年09月02日 02点09分
吧务
level 15
xzcyr 楼主
顶楼忘了提另一种常见的情形:拿内置函数当自定义函数的自变量的话,Mathematica会优先把这些函数识别为自变量,如果函数还恰好有简写形式的话,你可能还半天反应不过来。简例:
f[List_] := {List}
f[aaa]
(* aaa[aaa] *)
这是咋回事?这是因为 {…} 的完整形式是 List[…],也就是说,上述函数等效于
f[var_] := var[var]
2025年08月20日 03点08分 6
吧务
level 15
xzcyr 楼主
活到老,学到老……昨天又学到一点新东西。上面已经提到,下划线 _ 在 Mathematica 里不能用作变量命名,因为它已经被用作 Blank 等函数的简写了,但是,如果我们硬是执行
a_b=1
你猜,会发生什么?是会报错吗?我们来试试:
a_b = 1
DownValues[b]
b[]
b[嘿嘿]
b[没, 想, 到, 吧]
其实,仔细思考之后,不难意识到这个行为和整个模式匹配系统的设计是一致的,依旧困惑的童鞋可以复习自带帮助的相关教程。
2025年08月21日 11点08分 7
1