Re: list of Mma commands with specified properties
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg705] Re: [mg644] list of Mma commands with specified properties
- From: Lou Talman <me at talmanl.mscd.edu>
- Date: Mon, 10 Apr 95 16:57:56 -0600
Begin forwarded message:
> Date: Wed, 5 Apr 1995 10:03:45 -0400 (EDT)
> From: Jack Goldberg <jackgold at math.lsa.umich.edu>
> To: mathgroup at christensen.cybernetics.net
> Subject: [mg644] list of Mma commands with specified properties
Hi Group;
A student asked me "Which Mma commands have the option
of allowing Trig->False so that she could set Trig->True?"
This question raises a more general issue which I pose to
you in the form of two questions:
(1) How does one ask for a list of commands which have a
specified option such as Trig->False ?
(I won't clutter cyberspace with my makeshift solution, since I'll
bet there is a "professional" way to do it.)
(2) Same question for attributes, say for instance, Listable?
Another student asked this question (actually it was me):
(3) Is there a way of forcing the front end to produce
output in MatrixForm in a given Mma session rather than
a list of lists (of equal length) as it does now?
This is of value when one knows in advanced that a particular
session will be dealing entirely with matrices.
Jack
(1) & (2): The main problem here is obtaining a list of the commands
available in Mathematica in a form that Mathematica can use as input to
other commands. The "?*" produces a "list" of all objects currently
defined, but the "?" command can't be composed with other commands, so one
must be sneaky. I used the following package (which I wrote myself
several years ago) to capture the output from "?*" in a text file with
page width 30:
-----------begin package------------
BeginPackage["LogToFile`"]
LogToFile::usage = "LogToFile[filename, pagewidth, pageheight] toggles
logging to the named file. The variables 'pagewidth' and 'pageheight' are
optional; if not specified, they will be set to 78 and 22 (i.e., the
Mathematica defaults), respectively. Logging to multiple files is
possible;
the files may be toggled in arbitrary order."
Begin["LogToFile`private`"]
LogToFile[filename_, pagewidth_:78, pageheight_:22] :=
( tag = ToString[filename];
If[MemberQ[$Echo, tag],
(* True *)
$Echo = Complement[$Echo, {tag}];
$Output = Complement[$Output, {tag}];
$Messages = Complement[$Messages, {tag}];
$Urgent = Complement[$Urgent, {tag}];
Close[tag]; ,
(* False *)
OpenAppend[tag, FormatType -> OutputForm,
PageWidth -> pagewidth,
PageHeight -> pageheight];
PrependTo[$Echo, tag];
PrependTo[$Output, tag];
PrependTo[$Messages, tag];
PrependTo[$Urgent, tag];
];);
Protect[LogToFile];
End[ ]
EndPackage[ ]
--------------end package--------------
For some reason, Mathematica running on the NeXT won't open and read text
files that it wrote itself using this package, so I used my text editor to
copy the contents of the file the package created to another file named
"Commands.txt". Then, in a new Mathematica session:
commands = ReadList["Commands.txt", Word]
Select[commands,
MemberQ[Options[ToExpression[#]], Trig -> _]&]
It's clumsy, but it works. And once you have the textfile, you can search
it for any old option.
(3) Try this, or some variant:
MyOutput[x_] := MatrixForm[x] /; MatrixQ[x];
MyOutput[x_] := x /; ! MatrixQ[x];
$Post = MyOutput
--Lou Talman
Metropolitan State College of Denver