aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-05-05 22:04:20 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-05-05 22:04:20 -0400
commitaa396f30dc8c4650778a5ede37b670a9289cc14e (patch)
tree656ba1d673f34ae93b4fc759870032fe20c7adac /docs
parent30be9f25b1caa4af606c4d7e10dfd3b68404499e (diff)
Basic •math support: no pervasion or inverses
Diffstat (limited to 'docs')
-rw-r--r--docs/bqn.js12
1 files changed, 10 insertions, 2 deletions
diff --git a/docs/bqn.js b/docs/bqn.js
index f75f5f9a..78943be4 100644
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -24,6 +24,12 @@ let readns = (v, vid, i) => {
if (!has(ni)) throw Error("← or ↩: Unknown namespace key");
return v[ni];
}
+let makens = (keys, vals) => {
+ let n = Array(keys.length).fill().map((_,i)=>i);
+ n.names=keys.map(k=>k.toLowerCase()); vals.ns=n; return vals;
+}
+let obj2ns = (obj, keys) => makens(keys, keys.map(k=>obj[k]));
+
let getv= (a,i) => { let v=a[i]; if (v===null) throw Error("Runtime: Variable referenced before definition"); return v; }
let get = x => x.e ? getv(x.e,x.p) : arr(x.map(c=>get(c)), x.sh);
let set = (d, id, v) => {
@@ -92,7 +98,7 @@ let run = (B,O,S,L,T) => { // Bytecode, Objects, Sections/blocks, Locations, Tok
let def = new Array(sp + varam).fill(null);
let ns = {}; if (vex) vex.forEach((e,j)=>{if(e)ns[vid[j]]=j+sp;});
vid = (new Array(sp).fill(null)).concat(vid);
- if (T) ns.names = vid.names = T[2][0];
+ if (T) ns.names = vid.names = T[2][0].map(s=>s.join(""));
let c = genjs(B, pos, L);
let repdf = ["","4,f,mod","5,f,mod,g"].map(s=>s?"fn.repr=()=>["+s+"];":s);
if (imm) c = "const e=[...e2];e.vid=vid;e.p=oe;"+c;
@@ -428,11 +434,13 @@ let extendedbqn = (x,w) => {
let bqn = bqngen(compgen(list(pr)),list([rt,system]));
return (x,w)=>bqn(req1str("•BQN extension",x,w));
}
+let trig = "cos cosh sin sinh tan tanh";
let dynsys = f => { f.dynamic=1; return f; }
let sysvals = {
bqn:(x,w)=> bqn(req1str("•BQN",x,w)), js:dojs, extendedbqn,
type, glyph, decompose, fmt:fmt1, unixtime,
- listsys: dynsys(() => list(Object.keys(sysvals).map(str).sort()))
+ listsys: dynsys(() => list(Object.keys(sysvals).map(str).sort())),
+ math: obj2ns(Math,("E LN10 LN2 LOG10E LOG2E PI SQRT1_2 SQRT2 cbrt expm1 hypot log10 log1p log2 round trunc atan2 "+trig).split(" "))
};
let make_timed = tfn => {