Mr.*_*ard 7 import parsing wolfram-mathematica paste
我的一个小小的烦恼是使用双方括号Part
而不是单个字符\[LeftDoubleBracket]
和\[RightDoubleBracket]
.我希望在将纯文本代码(例如StackOverflow)粘贴到Mathematica Notebook时自动替换它们.我一直无法配置它.
可以使用ImportAutoReplacements
或其他自动方法(首选),或者我需要使用像这里引用的"粘贴表格数据调色板"这样的方法吗?
无论哪种方式,我不善于字符串解析,我想学习处理括号计数的最佳方法.
Sjoerd给了Defer
和Simon给了Ctrl+ Shift+ N,这两个都导致Mathematica自动格式化代码.这些是很好的选择.
我仍然对一种自动和/或保留尽可能多的原始代码的方法感兴趣.例如,以原始形式维护前缀f@1
,中缀1 ~f~ 2
和后缀1 // f
函数.
该问题的一个小节被重新发布为字符串中的匹配括号,并收到了几个好的答案.
并不是真正的答案,而是几周前数学组上出现了一个使用单次击键输入双 [[ ]] 对(光标位于两对之间)的线程。这对我没有帮助,但对于其他人来说这显然是一个解决方案。
编辑
以弥补我稍微偏离主题的第一反应,这里有一个模式替换,似乎可以完成这项工作(尽管我自己很难理解为什么它应该是 b 而不是 b_;后者不起作用):
Defer[f[g[h[[i[[j[2], k[[1, m[[1, n[2]]]]]]]]]]]] /.
HoldPattern[Part[b, a_]] -> HoldPattern[b\[LeftDoubleBracket]a\[RightDoubleBracket]]
Run Code Online (Sandbox Code Playgroud)
我把自动化部分留给你。
编辑2
我发现,如果您将上述规则添加到 ImportAutoReplacements 并将您的 SO 代码粘贴到 Defer[] 的笔记本中并对其进行评估,您最终会得到一个带有双括号的可用表单,可以在其他地方用作输入。
编辑 3
正如 Mr.Wizard 在下面的评论中无形地指出的那样,替换规则不是必需的。Defer 会自行完成!比尔·沃特森(Bill Watterson)引用了科学进步的“混乱”。
编辑 4
对于 Defer,目前还没有定论。它有一些特殊的副作用,并且并非对所有表达式都有效。例如,尝试工具包问题中的“粘贴表格数据调色板” 。将这段代码粘贴到 Defer 中并执行会得到以下结果:
它在同一线程的另一个代码片段中效果更好:
第二部分是通过编辑第一个块的输出将其转换为输入后的外观(基本上,我插入了几个回车符来恢复格式)。这会将其变成输入。请注意,所有双括号都变成了正确的对应符号,但还要注意 ReleaseHold 位置的变化。