MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

NotebookGetExpression

  • To: mathgroup at smc.vnet.net
  • Subject: [mg118951] NotebookGetExpression
  • From: roby <roby.nowak at gmail.com>
  • Date: Tue, 17 May 2011 07:47:53 -0400 (EDT)

Dear all !

I am looking for a way how to revert to an expensive (processing time)
evaluated expression.

I would like to have a notebook (or package) containing the expression
in question which should be reevaluated only on a manual request and
otherwise the once preevaluated expression should be used.

Any hints on how this could be achieved simpler ?
I found the following solution:

(*--------------------------------------------------------------------- *)

(* get the expression of the preceding cell *)
NotebookGetExpression[] := Module[{nb, e},
  	nb = SelectedNotebook[];
  	SelectionMove[nb, Before, EvaluationCell];
  	SelectionMove[nb, Previous, CellContents];
  	e = ToExpression@NotebookRead[nb];
  	SelectionMove[nb, After, EvaluationCell];
  	e
  ]

(* this stands exemplary for an expression expensive to evaluate *)
(* after once evaluated the cell will be marked by hand as non
evaluatable *)
(* would be nice if the non evaluatable marking could be automated *)

Expand[(x + y)^2]

Out[ ]= x^2 + 2 x y + y^2

(* her we get the preceding expression and define a function for it *)
Ex[x_, y_] = NotebookGetExpression[];

(* test the defined function *)
Ex[a, b]

Out[ ]= a^2 + 2 a b + b^2

(*------------------------------------------------------------------------*)

(* CellExpression starting here : *)
{
Cell[BoxData[
 RowBox[{
  RowBox[{"(*", " ",
   RowBox[{
   "gets", " ", "the", " ", "expression", " ", "of", " ", "the", " ",
    "preceding", " ", "cell"}], " ", "*)"}], "\n",
  RowBox[{
   RowBox[{"NotebookGetExpression", "[", "]"}], ":=",
   RowBox[{"Module", "[",
    RowBox[{
     RowBox[{"{",
      RowBox[{"nb", ",", "e"}], "}"}], ",", "\n", "\t",
     RowBox[{
      RowBox[{"nb", "=",
       RowBox[{"SelectedNotebook", "[", "]"}]}], ";", "\n", "\t",
      RowBox[{"SelectionMove", "[",
       RowBox[{"nb", ",", "Before", ",", "EvaluationCell"}], "]"}],
      ";", "\n", "\t",
      RowBox[{"SelectionMove", "[",
       RowBox[{"nb", ",", "Previous", ",", "CellContents"}], "]"}],
      ";", "\n", "\t",
      RowBox[{"e", "=",
       RowBox[{"ToExpression", "@",
        RowBox[{"NotebookRead", "[", "nb", "]"}]}]}], ";", "\n",
"\t",
      RowBox[{"SelectionMove", "[",
       RowBox[{"nb", ",", "After", ",", "EvaluationCell"}], "]"}],
      ";", "\n", "\t", "e"}]}], "\n", "]"}]}]}]], "Input",
 CellChangeTimes->{{3.514611168095347*^9, 3.514611328704722*^9}, {
   3.5146116455745387`*^9, 3.5146116509185286`*^9}, {
   3.514611853377117*^9, 3.5146118571428137`*^9}, {
   3.5146120519585495`*^9, 3.514612127927786*^9}, {
   3.514612364241467*^9, 3.514612367991467*^9}, {
   3.5146124428041286`*^9, 3.514612443429145*^9}, {
   3.514613427110442*^9, 3.5146134734076815`*^9},
   3.514613562174443*^9, {3.5146136409098253`*^9,
   3.514613720004588*^9}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"(*", " ",
   RowBox[{
   "this", " ", "stands", " ", "exemplary", " ", "for", " ", "an",
    " ", "expression", " ", "expensive", " ", "to", " ", "evaluate"}],
    " ", "*)"}], "\n",
  RowBox[{"(*", " ",
   RowBox[{
   "after", " ", "once", " ", "evaluated", " ", "the", " ", "cell",
    " ", "will", " ", "be", " ", "marked", " ", "by", " ", "hand",
    " ", "as", " ", "non", " ", "evalauatable"}], " ", "*)"}], "\n",
  RowBox[{"(*", " ",
   RowBox[{
   "would", " ", "be", " ", "nice", " ", "if", " ", "the", " ", "non",
     " ", "evaluatable", " ", "marking", " ", "could", " ", "be", " ",
     "automated"}], " ", "*)"}], "\n",
  RowBox[{"Expand", "[",
   SuperscriptBox[
    RowBox[{"(",
     RowBox[{"x", "+", "y"}], ")"}], "2"], "]"}]}]], "Input",
 Evaluatable->False,
 CellChangeTimes->{{3.514611868752412*^9, 3.5146120165051975`*^9}, {
  3.514613501236163*^9, 3.5146135021893*^9}, {3.5146137213483553`*^9,
  3.514613723160878*^9}, {3.5146137558330317`*^9,
  3.5146137883642817`*^9}}],

Cell[BoxData[
 RowBox[{
  SuperscriptBox["x", "2"], "+",
  RowBox[{"2", " ", "x", " ", "y"}], "+",
  SuperscriptBox["y", "2"]}]], "Output",
 CellChangeTimes->{3.514611341923472*^9}]
}, Open  ]],

Cell[BoxData[
 RowBox[{
  RowBox[{"(*", " ",
   RowBox[{
   "her", " ", "we", " ", "get", " ", "the", " ", "expression", " ",
    "of", " ", "the", " ", "preceding", " ", "and", " ", "define",
    " ", "a", " ", "function", " ", "for", " ", "it"}], " ", "*)"}],
  "\n",
  RowBox[{
   RowBox[{
    RowBox[{"Ex", "[",
     RowBox[{"x_", ",", "y_"}], "]"}], "=",
    RowBox[{"NotebookGetExpression", "[", "]"}]}], ";"}]}]], "Input",
 CellChangeTimes->{{3.51461143789336*^9, 3.5146114714729896`*^9}, {
  3.51461151100601*^9, 3.514611576665202*^9}, {3.51461169146722*^9,
  3.5146117313278985`*^9}, {3.5146135213770456`*^9,
  3.5146135825028276`*^9}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"(*", " ",
   RowBox[{"test", " ", "the", " ", "defined", " ", "function"}], " ",
    "*)"}], "\n",
  RowBox[{"Ex", "[",
   RowBox[{"a", ",", "b"}], "]"}]}]], "Input",
 CellChangeTimes->{{3.5146114477219257`*^9, 3.5146114497063894`*^9}, {
  3.51461155541425*^9, 3.514611556461172*^9}, {3.514611709639909*^9,
  3.5146117106712055`*^9}, {3.514611837439311*^9,
  3.51461183870496*^9}, {3.5146138100517817`*^9,
  3.5146138104580317`*^9}}],

Cell[BoxData[
 RowBox[{
  SuperscriptBox["a", "2"], "+",
  RowBox[{"2", " ", "a", " ", "b"}], "+",
  SuperscriptBox["b", "2"]}]], "Output",
 CellChangeTimes->{3.514614846234047*^9}]
}, Open  ]]
}


  • Prev by Date: Re: Maintaining the order of terms when adding symbolic expressions
  • Next by Date: Re: How do you read Mathematica?
  • Previous by thread: Re: Formatting Question
  • Next by thread: Ignore missing data