在Mathematica中,可以通过执行命令
获取所有内置函数的名称,例如List
。
Names["List`*"]
另外
Names["context`*"]
列出指定上下文中的所有符号。例如。
Names["Global`*"]
给出所有内置符号的名称(以及用户在全局上下文中定义的符号)。
Matlab / Octave中是否有类似的结构?
答案 0 :(得分:5)
在Octave中,您可以使用以下功能:
__operators__ : Undocumented
__keywords__ : Undocumented
__builtins__ : Undocumented
__list_functions__ : Return a list of all functions (.m and .oct functions) in the load path or in the specified directory.
localfunctions : Return a list of all local functions, i.e., subfunctions, within the current file.
未记录的函数__dump_symtab_info__
,它转储包含不同范围内的函数和变量名的符号表:
__dump_symtab_info__ (scope) : Dump symbol table of the given scope
__dump_symtab_info__ (__current_scope__) : Dump symbol table of the current scope
__dump_symtab_info__ ("functions") : Dump globally visible functions from symbol table
__dump_symtab_info__ ("scopes") : List available scopes
__dump_symtab_info__ () : Everything
答案 1 :(得分:4)
据我所知,在MATLAB中没有相当于Octave的__list_functions__
。但是建立一个很容易:
% Generate a list of all directories searched by MATLAB:
pathlist = strsplit(path,pathsep);
% Get functions and classes on search path
functions = {};
classes = {};
for p = pathlist
w = what(p{1});
functions = [functions; ...
erase(w.m,'.m'); ... % M-files
erase(w.mex,['.',mexext]); ... % MEX-files
erase(w.p,'.p')]; % and P-files are all functions
classes = [classes; w.classes]; % here are all classes
% TODO: w.packages gives package directory names, examine those too!
end
% Remove duplicates
functions = unique(functions);
classes = unique(classes);
以上跳过函数包中定义的函数(这些函数称为package.function
,包文件以+
字符开头。执行what('package')
将提供更多函数和类名称以添加到列表中。
请注意,这并不限制内置函数,如问题所示。它列出了搜索路径上的所有功能。要限制内置函数,请仅搜索toolbox/matlab
中的目录。
我不知道列出运算符和关键字的任何方法,但这是一个很容易硬编码的简短列表。 MATLAB有一个函数iskeyword
,可以告诉你给定的名字是否是关键字的名称。此函数的来源(type iskeyword
或edit iskeyword
)包含此列表。
相关,函数inmem
列出了当前加载的所有函数。这些是自MATLAB启动以来或自上次调用clear functions
或clear all
以来实际使用的函数。请注意,函数可以将自己锁定在内存中,而不是使用clear functions
清除。