【发布时间】:2014-01-02 19:17:56
【问题描述】:
我想让mathematica 对函数的第一个大写字母不敏感。例如,它接受“Plot”和“plot”作为绘图函数。
【问题讨论】:
-
对于一个具体的例子,你可以做
plot=Plot。一般来说,我怀疑答案是“你不想那样做”,但你应该在mathematica.stackexchange.com上询问
我想让mathematica 对函数的第一个大写字母不敏感。例如,它接受“Plot”和“plot”作为绘图函数。
【问题讨论】:
plot=Plot。一般来说,我怀疑答案是“你不想那样做”,但你应该在mathematica.stackexchange.com上询问
我同意george 的观点:“你不想那样做。”通常的做法是用小写字母开始用户符号,这样既可以识别它们,又可以防止与内置函数发生冲突。不过,您可以通过多种方式做到这一点。一种是按照乔治的建议创建别名,例如
plot = Plot;
sin = Sin;
plot[sin[x], {x, 0, 6}]
这具有即使在包中也可以工作的优点,因为它不依赖于前端。但是,因为这些是not true aliases,所以在某些情况下会失败,例如:
evaluate = Evaluate;
Hold[evaluate[2 + 2]]
Hold[evaluate[2 + 2]]
而“真实”函数的行为如下:
Hold[Evaluate[2 + 2]]
Hold[4]
要获得完全等效,尽管仅在前端,您可以使用$PreRead。 (Example.) 您需要建立一个规则列表,将每个小写符号的字符串形式替换为大写字符串。我将只对System` 上下文中的所有符号执行此操作。
With[{rules = Thread[ToLowerCase[#] -> #] & @ Names["System`*"]},
$PreRead = # /. rules &
];
现在这两个例子都有效:
plot[sin[x], {x, 0, 6}]
hold[evaluate[2 + 2], 3 + 4]
后者产生:
Hold[4, 3 + 4]
【讨论】:
这不是您问题的直接答案,我强烈建议您不要仅仅为了字母大小写而重新定义 Mathematica 函数。
不过,你有没有看到当你去 Edit -> Preferences -> Match case in command completion 有一个选项em>接口?
如果你关闭它,那么你可以在笔记本中输入plot,你会得到正确的Plot作为自动完成的建议。您只需按回车键并插入正确的命令。
【讨论】: