1%D \module 2%D [ file=supp-ran, 3%D version=2008-10-31, 4%D title=\CONTEXT\ Support Macros, 5%D subtitle=Random Number Generation, 6%D author=Hans Hagen, 7%D date=\currentdate, 8%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] 9%C 10%C This module is part of the \CONTEXT\ macro||package and is 11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 12%C details. 13 14\writestatus{loading}{ConTeXt Support Macros / Random Number Generation} 15 16%D This module is downward compatible in the sense that we've kept the user 17%D interface (which uses intermediate variables). 18%D 19%D \starttyping 20%D \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par 21%D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par 22%D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par 23%D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par 24%D \pushrandomseed \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par 25%D \poprandomseed \type{old}: \dorecurse{10}{\randomnumber{1}{100} }\par 26%D \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par 27%D \stoptyping 28 29\registerctxluafile{supp-ran}{autosuffix} 30 31\unprotect 32 33\permanent\protected\def\getrandomcount #1#2#3{#1={#2}{#3}\relax} 34\permanent\protected\def\getrandomdimen #1#2#3{#1={#2}{#3}\scaledpoint\relax} 35\permanent\protected\def\getrandomnumber#1#2#3{\edef#1{{#2}{#3}}} 36\permanent\protected\def\getrandomfloat #1#2#3{\edef#1{{#2}{#3}}} 37\permanent\protected\def\setrandomseed #1{{#1}} 38\permanent\protected\def\getrandomseed #1{\edef#1{}} 39\permanent\protected\def\newrandomseed {} 40%permanent\protected\def\pushrandomseed {\clf_pushrandomseed} 41%permanent\protected\def\poprandomseed {\clf_poprandomseed} 42%permanent\protected\def\reuserandomseed {\clf_reuserandomseed} % within push/pop 43 44\aliased\let\freezerandomseed \pushrandomseed 45\aliased\let\defrostrandomseed\poprandomseed 46 47\setnewconstant \mpscaledmax 4095 % for old times sake 48 49\permanent\def\randomnumber #1#2{\numexpr#1\relax\numexpr#2\relax} 50\permanent\def\mprandomnumber {\zerocount\mpscaledmax} 51 52%D \startbuffer 53%D \enabletrackers[system.randomizer.details] 54%D 55%D \newrepeatablerandom\MyRandom {Welcome 2 America} 56%D \newrepeatablerandom\MyRandomN{\randomnumber{0}{1000}} 57%D \newrepeatablerandom\MyRandomM{\randomnumber{0}{1000}} 58%D 59%D \cldcontext{utilities.randomizer.getrepeatableseed()}\par 60%D \cldcontext{utilities.randomizer.getrepeatableseed("default")}\par 61%D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandom")}\par 62%D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandomN")}\par 63%D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandomM")}\par 64%D 65%D \dorecurse{10}{\MyRandom\par} 66%D 67%D \startMPcode 68%D randomseed := repeatablerandom("MyRandom") ; 69%D draw image ( 70%D for i=1 upto 10000 : 71%D draw origin randomized 100 ; 72%D endfor ; 73%D ) withpen pencircle scaled 1 ; 74%D \stopMPcode 75%D 76%D \startluacode 77%D context(utilities.randomizer.getrepeatableseed("MyRandom")) 78%D context.par() 79%D local rep = utilities.randomizer.getrepeatable("MyRandom") 80%D for i=1,5 do 81%D context(rep()) 82%D context.par() 83%D end 84%D \stopluacode 85%D \stopbuffer 86%D 87%D \typebuffer \blank \getbuffer \blank 88 89\protect \endinput 90 |