gpt4 book ai didi

wolfram-mathematica - 如何获取与其他符号相关的所有定义?

转载 作者:行者123 更新时间:2023-12-04 17:27:33 24 4
gpt4 key购买 nike

如何通过 TagSet 获取与其他符号关联的符号的所有定义, TagSetDelayed , UpSetUpSetDelayed ?

例如,如果已经定义了

area[square] ^= s^2
area[cube] ^= 6*s^2

如何获得这些定义,不知道名称 square , cube但只知道名字 area ?

我刚刚发现 UpValues不返回 MakeBoxes 的定义和 N因为它们存储在 FormatValues 中和 NValues相应地:
In[1]:= rotate /: MakeBoxes[expr_rotate, "StandardForm"] := x
UpValues[rotate]
FormatValues[rotate]

Out[2]= {}

Out[3]= {HoldPattern[MakeBoxes[expr_rotate, "StandardForm"]] :> x}

In[4]:= pi /: N[pi] = 3.14
UpValues[pi]
NValues[pi]

Out[4]= 3.14

Out[5]= {}

Out[6]= {HoldPattern[N[pi, {MachinePrecision, MachinePrecision}]] :>
3.14}

用这种方式代替 UpValues我们应该使用 UpValues 的组合, FormatValuesNValues .

尝试输出 FormatValues 的列表时一个人可能会遇到问题 MakeBoxesFormatValues给出 MakeBoxes 的定义那些 are further processed by MakeBoxes on creating the output for the FrontEnd .这个问题可以通过切换 FormatType来解决暂时到 OutputForm或者通过将这些定义转换为字符串。
In[1]:= SetOptions[$Output,FormatType->OutputForm];
FormatValues[DialogNotebook]
Out[2]= {HoldPattern[MakeBoxes[BoxForm`apat$:HoldPattern[DialogNotebook[___]], BoxForm`fpat$_]] :>

BoxForm`BoxFormAutoLoad[MakeBoxes, BoxForm`apat$, BoxForm`fpat$, Typeset`CellNotebook`,

{{CellGroup, _}, {DocumentNotebook, _}, {PaletteNotebook, _}, {DialogNotebook, _}, {ExpressionCell, _}, {Text, _},

{TextCell, _}, {Cell, HoldPattern[MakeExpression[_Cell, _]]}, {Notebook, HoldPattern[MakeExpression[_Notebook, _]]}}]}

In[1]:= ToString@FormatValues[DialogNotebook]
Out[1]= {HoldPattern[MakeBoxes[BoxForm`apat$:HoldPattern[DialogNotebook[___]], BoxForm`fpat$_]] :> BoxForm`BoxFormAutoLoad[MakeBoxes, BoxForm`apat$, BoxForm`fpat$, Typeset`CellNotebook`, {{CellGroup, _}, {DocumentNotebook, _}, {PaletteNotebook, _}, {DialogNotebook, _}, {ExpressionCell, _}, {Text, _}, {TextCell, _}, {Cell, HoldPattern[MakeExpression[_Cell, _]]}, {Notebook, HoldPattern[MakeExpression[_Notebook, _]]}}]}

最佳答案

试图用霍华德的回答解决阿列克谢的担忧,我想出了这个:

Cases[
UpValues @@@ MakeExpression /@ Names["Global`*"],
HoldPattern[_@_area :> _],
{2}
]

针对您更新的需求,这里是高级版本:
SetAttributes[otherValues, HoldFirst]

otherValues[sym_] :=
With[{names = MakeExpression /@ Names["Global`*"]},
Join[
Cases[UpValues @@@ names, HoldPattern[_@_sym :> _], {2}],
Cases[NValues @@@ names, HoldPattern[_@N[sym, ___] :> _], {2}],
Select[Join @@ FormatValues @@@ names, ! FreeQ[#, HoldPattern@sym] &]
]
]

关于wolfram-mathematica - 如何获取与其他符号相关的所有定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5840313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com