summaryrefslogtreecommitdiff
path: root/doc/context/sources/general/manuals/math/math-fun.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/context/sources/general/manuals/math/math-fun.tex')
-rw-r--r--doc/context/sources/general/manuals/math/math-fun.tex116
1 files changed, 116 insertions, 0 deletions
diff --git a/doc/context/sources/general/manuals/math/math-fun.tex b/doc/context/sources/general/manuals/math/math-fun.tex
new file mode 100644
index 000000000..f9d0fe844
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-fun.tex
@@ -0,0 +1,116 @@
+\environment math-layout
+
+\startcomponent math-fun
+
+\usemodule[mathfun]
+
+\startchapter[title=Fun stuff] % As is watching the funplex DVD.
+
+% \startsection[title=How it started]
+
+When I decided to add the \type {\uuid} macro (a trivial task because there was
+already a \LUA\ function for it in \CONTEXT) I wondered about other functions
+that could be added, like those for sine and cosine. There is no real need
+for that because we can already do this:
+
+\startbuffer[a]
+\luaexpr{math.sin(math.pi/4)}
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+\luaexpr[.4N]{math.sin(math.pi/4)}
+\stopbuffer
+
+which gives us \inlinebuffer[a]\ as result, but still one can ponder the
+usability of additional macros. When seeing this, one of the first things that
+probably comes to mind is how to get less digits, and indeed that can be
+achieved, as \inlinebuffer[b]\ demonstrates.
+
+\typebuffer[b]
+
+The optional argument between square brackets is a template as we know from other
+\CONTEXT\ commands without the leading percentage sign. But what if we don't want
+this expression and explicit math function call?
+
+\startbuffer
+$ \sin (x) = \the\sin{pi/8} $
+\stopbuffer
+
+\typebuffer
+
+This gives us a normal rendered sin function symbol at the left hand and a
+numeric result at the right hand: \inlinebuffer. The nice thing about it is that
+we don't need to come up with new macro names. \footnote {At some point \CONTEXT\
+might introduce a namespace mechanism to deal with possible conflicts between
+environments.} In a similar fashion we can do this:
+
+\startbuffer
+$ \sind(x) = \luaexpr[.4N]{math.sind(120)} = \the\sind[.4N]{120} $
+\stopbuffer
+
+\typebuffer
+
+Both calls give the same result: \inlinebuffer\ and in case you wonder why we
+have only three digits: the \type {N} formatter removes trailing zeros. However,
+the \type {\the} prefix is still not that nice, apart from the fact that we abuse
+a feature of the \LUA\ interface meant for other purposes (read: we cheat). So,
+in a next step in exploring this I cooked up:
+
+\startbuffer
+$ \sqrt(x) = \the\sqrt[.3N] {2} $
+$ \sqrt(x) = \compute\sqrt[.3N] {2} $
+\stopbuffer
+
+\typebuffer
+
+There is still a prefix but \type {\compute} looks more natural. It is not an
+alias for \type {\the} but a shortcut for a prefix feature that can drive all
+kind of interpretations of in this case \type {\sin}, and that is probably where
+the real fun will start. Instead of functions we can also have constants:
+
+\startbuffer
+$ \pi = \compute\pi[.4N] $
+\stopbuffer
+
+In case you wonder how extensible this mechanism is, here is what happens in the
+\type {mathfun} module that needs to be loaded in the usual way. There you find:
+
+\pushoverloadmode
+ \ifdefined\normalpi \else\let\normalpi\pi \fi
+
+ \registermathfunction[sind,cosd,tand,sin,cos,tan]
+ \registermathfunction[sqrt]
+ \registermathfunction[pi][constant]
+\popoverloadmode
+
+The module also provides a few more expression variants (these can end up in the
+core if really needed much):
+
+\startbuffer
+$ \pi = \mathexpr[.40N]{pi} $
+$ \pi = \mathexpr[.80N]{sqrt(11)} $
+$ \pi = \decimalexpr[.80N]{sqrt(11)} $
+$ \pi = \decimalexpr{sqrt(11)} $
+$ c = \complexexpr{123 + new(456,789)} $
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlines
+ \getbuffer
+\stoplines
+
+The question is: do we need this and if so, what more do we need? Feel free to bing it up on
+the \CONTEXT\ mailing list. It anyway is a nice dmonstration of what can be done with the
+mix of languages.
+
+% \stopsection
+
+\stopchapter
+
+\stopcomponent
+