当前位置:  开发笔记 > 编程语言 > 正文

Mathematica Downvalue Lhs

如何解决《MathematicaDownvalueLhs》经验,为你挑选了2个好方法。

有没有人知道Mathematica中是否有内置函数来获取低值规则的lhs(没有任何持有)?我知道如何编写代码来实现它,但对于内置代码来说它似乎已经基本了

例如:

a[1]=2;
a[2]=3;

BuiltInIDoNotKnowOf[a] 回报 {1,2}



1> dreeves..:

这就像keys()Perl和Python以及内置支持哈希(又名词典)的其他语言一样.如您的示例所示,Mathematica支持没有任何特殊语法的哈希.只是说a[1] = 2,你有一个哈希.[1]要获取哈希的密钥,我建议将其添加到init.m或您的个人实用程序库中:

keys[f_] := DownValues[f][[All,1,1,1]]  (* Keys of a hash/dictionary. *)

(或者以下纯函数版本应该稍快一些:

keys = DownValues[#][[All,1,1,1]]&;     (* Keys of a hash/dictionary. *)

)

无论哪种方式,keys[a]现在返回你想要的.(您可以使用a /@ keys[a].获取哈希值.)如果您想允许更高的arity哈希值,a[1,2]=5; a[3,4]=6那么您可以使用:

SetAttributes[removeHead, {HoldAll}];
removeHead[h_[args___]] := {args}
keys[f_] := removeHead @@@ DownValues[f][[All,1]]

哪个回报{{1,2}, {3,4}}.(在这种情况下,您可以使用a @@@ keys[a].获取哈希值.)

请注意,DownValues默认情况下会对键进行排序,这可能不是一个好主意,因为最多需要额外的时间.如果你想要按键排序你可以做Sort@keys[f].所以我实际上会推荐这个版本:

keys = DownValues[#,Sort->False][[All,1,1,1]]&;

有趣的是,文档中没有提到Sort选项DownValues.我从Wolfram Research的Daniel Lichtblau发表的一篇帖子中发现了这一点.(我确认它仍然适用于Mathematica的当前版本(7.0).)


脚注:

[1]真正方便的是你可以将它与函数定义混合搭配.喜欢:

fib[0] = 1;
fib[1] = 1;
fib[n_] := fib[n-1] + fib[n-2]

然后,您可以通过将最后一行更改为来添加备忘录

fib[n_] := fib[n] = fib[n-1] + fib[n-2]

它表示缓存所有后续调用的答案.



2> Will Roberts..:

这似乎有效; 但不确定它有多大用处:

a[1] = 2
a[2] = 3
a[3] = 5
a[6] = 8
Part[DownValues[a], All, 1, 1, 1]

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有