4
$\begingroup$

I manually evaluate this cell to set Prime[0]

Unprotect[Prime]
Prime[0] = 1
Protect[Prime]   

I manually evaluate this cell to reset Prime[0]

Unprotect[Prime]
Prime[0] =.
Protect[Prime]  

In case I forget to do it, is there a way to automatically evaluate the second cell when I close the nb?

Motivation

I'm working with bags of primes and want to use $p_0$ as the bag for all prime greater than the square-root of some $n$.

Displayed as: $\left\{p_0^1,p_1^5,p_2^2,p_3^1,p_4^1\right\}$

With counts as: $\left\{1,5,2,1,1\right\}$

$\endgroup$
  • 1
    $\begingroup$ Have you seen NotebookEventActions[]? $\endgroup$ – J. M. will be back soon Sep 3 '12 at 7:03
  • 5
    $\begingroup$ You also could just define something like: prime[x_Integer /; x >= 0] := If[x == 0, 1, Prime[x]] as another approach. $\endgroup$ – Vitaliy Kaurov Sep 3 '12 at 7:07
  • $\begingroup$ @J.M.-- Looks interesting. I determined that if I exit mma, the change gets reset automatically. It's only a problem when I open or create nbs from the current session. Thanks. $\endgroup$ – Fred Kline Sep 3 '12 at 7:54
  • 2
    $\begingroup$ I was hoping you'd answer your question yourself, since you figured out how to use it... :) $\endgroup$ – J. M. will be back soon Sep 3 '12 at 12:25
5
$\begingroup$

Per J.M., I did this and it works. I put it in the same cell as the setup.

SetOptions[SelectedNotebook[],NotebookEventActions ->
Quiet[{Unprotect[Prime]; Prime[0] =.; Protect[Prime];}]}];
{Unprotect[Prime]; Prime[0] = 1; Protect[Prime]};    

Edited to add the Quiet to the actions.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.