minimal-lisp
Advanced tools
+127
| // miniMAL | ||
| // Copyright (C) 2017 Joel Martin | ||
| // Licensed under MPL 2.0 | ||
| !function() { | ||
| // 2 args: eval_ast, 3 args: env_bind | ||
| let eval_ast_or_bind = function(ast, env, exprs) { | ||
| if (exprs) { | ||
| // Return new Env with symbols in ast bound to | ||
| // corresponding values in exprs | ||
| env = Object.create(env) | ||
| ast.some((a,i) => a == "&" ? env[ast[i+1]] = exprs.slice(i) | ||
| : (env[a] = exprs[i], 0)) | ||
| return env | ||
| } | ||
| // Evaluate the form/ast | ||
| return ast instanceof Array // list? | ||
| ? ast.map((...a) => EVAL(a[0], env)) // list | ||
| : (typeof ast == "string") // symbol? | ||
| ? ast in env // symbol in env? | ||
| ? env[ast] // lookup symbol | ||
| : E.throw(ast + " not found") // undefined symbol | ||
| ///: null[ast] // undefined symbol | ||
| : ast // ast unchanged | ||
| } | ||
| function macroexpand(ast, env) { | ||
| while (ast instanceof Array | ||
| && ast[0] in env | ||
| && env[ast[0]].M) { | ||
| ast = env[ast[0]](...ast.slice(1)) | ||
| } | ||
| return ast | ||
| } | ||
| function EVAL(ast, env) { | ||
| while (true) { | ||
| //console.log("EVAL:", ast) | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
| // apply | ||
| ast = macroexpand(ast, env) | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
| if (ast[0] == "def") { // update current environment | ||
| return env[ast[1]] = EVAL(ast[2], env) | ||
| } else if (ast[0] == "~") { // mark as macro | ||
| let f = EVAL(ast[1], env) // eval regular function | ||
| f.M = 1 // mark as macro | ||
| return f | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
| return ast[1] | ||
| } else if (ast[0] == ".-") { // get or set attribute | ||
| let el = eval_ast_or_bind(ast.slice(1), env), | ||
| x = el[0][el[1]] | ||
| return 2 in el ? el[0][el[1]] = el[2] : x | ||
| } else if (ast[0] == ".") { // call object method | ||
| let el = eval_ast_or_bind(ast.slice(1), env), | ||
| x = el[0][el[1]] | ||
| return x.apply(el[0], el.slice(2)) | ||
| } else if (ast[0] == "try") { // try/catch | ||
| try { | ||
| return EVAL(ast[1], env) | ||
| } catch (e) { | ||
| return EVAL(ast[2][2], eval_ast_or_bind([ast[2][1]], env, [e])) | ||
| } | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| let f = function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
| let el = eval_ast_or_bind(ast, env), | ||
| f = el[0] | ||
| if (f.A) { | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
| return f(...el.slice(1)) | ||
| } | ||
| } | ||
| } | ||
| } | ||
| E = Object.assign(this, { | ||
| "js": eval, | ||
| "eval": (...a) => EVAL(a[0], E), | ||
| // These could all also be interop | ||
| "=": (...a) => a[0]===a[1], | ||
| "<": (...a) => a[0]<a[1], | ||
| "+": (...a) => a[0]+a[1], | ||
| "-": (...a) => a[0]-a[1], | ||
| "*": (...a) => a[0]*a[1], | ||
| "/": (...a) => a[0]/a[1], | ||
| "isa": (...a) => a[0] instanceof a[1], | ||
| "type": (...a) => typeof a[0], | ||
| "new": (...a) => new (a[0].bind(...a)), | ||
| "del": (...a) => delete a[0][a[1]], | ||
| //"list": (...a) => a, | ||
| //"map": (...a) => a[1].map(x => a[0](x)), | ||
| "throw": (...a) => { throw(a[0]) }, | ||
| "read": (...a) => JSON.parse(a[0]), | ||
| }) | ||
| Array.prototype.eval = function() { return E.eval(this) } | ||
| }() |
+29
-24
@@ -35,21 +35,26 @@ ["do", | ||
| ["def", "pr-list*", ["fn", ["a", "b", "c"], | ||
| [".", ["map", ["fn", ["x"], | ||
| ["if", "c", | ||
| [".", "JSON", ["`", "stringify"], "x"], | ||
| ["if", ["string?", "x"], | ||
| "x", | ||
| [".", "JSON", ["`", "stringify"], "x"]]]], | ||
| "a"], | ||
| ["`", "join"], "b"]]], | ||
| ["def", "pr-str", ["fn", ["&", "a"], | ||
| ["pr-list*", "a", ["`", " "], true]]], | ||
| [".", ["map", [".-", "JSON", ["`", "stringify"]], "a"], | ||
| ["`", "join"], ["`", " "]]]], | ||
| ["def", "str", ["fn", ["&", "a"], | ||
| ["pr-list*", "a", ["`", ""], false]]], | ||
| [".", ["map", ["fn", ["x"], | ||
| ["if", ["string?", "x"], | ||
| "x", | ||
| [".", "JSON", ["`", "stringify"], "x"]]], | ||
| "a"], | ||
| ["`", "join"], ["`", ""]]]], | ||
| ["def", "prn", ["fn", ["&", "a"], | ||
| ["do", [".", "console", ["`", "log"], | ||
| ["pr-list*", "a", ["`", " "], true]], null]]], | ||
| [".", ["map", [".-", "JSON", ["`", "stringify"]], "a"], | ||
| ["`", "join"], ["`", " "]]], | ||
| null]]], | ||
| ["def", "println", ["fn", ["&", "a"], | ||
| ["do", [".", "console", ["`", "log"], | ||
| ["pr-list*", "a", ["`", " "], false]], null]]], | ||
| [".", ["map", ["fn", ["x"], | ||
| ["if", ["string?", "x"], | ||
| "x", | ||
| [".", "JSON", ["`", "stringify"], "x"]]], | ||
| "a"], | ||
| ["`", "join"], ["`", " "]]], | ||
| null]]], | ||
@@ -67,3 +72,3 @@ ["def", "list?", ["fn", ["a"], | ||
| ["def", "vals", ["fn", ["a"], | ||
| ["map",["fn", ["k"], ["get", "a", "k"]], ["keys", "a"]]]], | ||
| [".", "Object", ["`", "values"], "a"]]], | ||
@@ -87,7 +92,7 @@ ["def", "cons", ["fn", ["a", "b"], | ||
| ["if", ["list?", "a"], | ||
| ["if", ["=", 0, [".-", "a", ["`", "length"]]], true, false], | ||
| ["=", 0, [".-", "a", ["`", "length"]]], | ||
| ["=", "a", null]]]], | ||
| ["def", "slice", ["fn", ["a", "b", "&", "end"], | ||
| [".", "a", ["`", "slice"], "b", | ||
| ["if", [">", ["count", "end"], 0], | ||
| ["if", [">", [".-", "end", ["`", "length"]], 0], | ||
| ["get", "end", 0], | ||
@@ -104,8 +109,8 @@ [".-", "a", ["`", "length"]]]]]], | ||
| true, | ||
| ["if", ["=", 1, ["count", "xs"]], | ||
| ["if", ["=", 1, [".-", "xs", ["`", "length"]]], | ||
| ["first", "xs"], | ||
| ["list", ["`", "let"], ["list", ["`", "and_FIXME"], ["first", "xs"]], | ||
| ["list", ["`", "if"], ["`", "and_FIXME"], | ||
| ["list", ["`", "let"], ["list", ["`", "__and"], ["first", "xs"]], | ||
| ["list", ["`", "if"], ["`", "__and"], | ||
| ["concat", ["`", ["and"]], ["rest", "xs"]], | ||
| ["`", "and_FIXME"]]]]]]]], | ||
| ["`", "__and"]]]]]]]], | ||
@@ -115,7 +120,7 @@ ["def", "or", ["~", ["fn", ["&", "xs"], | ||
| null, | ||
| ["if", ["=", 1, ["count", "xs"]], | ||
| ["if", ["=", 1, [".-", "xs", ["`", "length"]]], | ||
| ["first", "xs"], | ||
| ["list", ["`", "let"], ["list", ["`", "or_FIXME"], ["first", "xs"]], | ||
| ["list", ["`", "if"], ["`", "or_FIXME"], | ||
| ["`", "or_FIXME"], | ||
| ["list", ["`", "let"], ["list", ["`", "__or"], ["first", "xs"]], | ||
| ["list", ["`", "if"], ["`", "__or"], | ||
| ["`", "__or"], | ||
| ["concat", ["`", ["or"]], ["rest", "xs"]]]]]]]]], | ||
@@ -122,0 +127,0 @@ |
+1
-1
@@ -1,1 +0,1 @@ | ||
| for(_=',["~","|"~zz`|ZinY Y XvalW;t=V"==U[tRifQ)=>P(...K:KnPnImapG(tF.GF=>EJSON.DnFC,i)B[0]5B,f=n54("\\n".Wuefaczelse]]typeof let=Object.))[2]t.length-1[1]n,",t5.onkeyup]\\n["textareafunctionKtPC5,f.astcreate({ n=eF Q("t Ystanceof Array.slice(< rows=9 cols=60>return Ut5)"I5 1)4[n]; CB{for(;;){Q(!(eFB;defiR]=CB;{ii);for( eXt)e%2&&(iR[e-1=C[e],iVt}{`t;.-2Xn?n5[n]=n:f}.f.apply(n5,n2}do 1,)BVt[]} Qt=CB?t:t[3];{fn{ f=Kf){C,eF,i,f};=R,i,t],f} 4;Q(!)fKn1V5,i=e(,,n1}}}}}var e=F,eB{i?(ee),t.some((n,fP"&Un?eR[f+1=if):(e[n]=i[f],0,e):?t.G(e:"Ut?tXe?eR]:nullR]:t};AassigChis,{js:eW,eW:A),"====<<++--**//n,GIEn5F}),b.YnerHTML=\'["zmZmYi"~+|mZMAL"def|fnzn"]~Q|nz*|nz-|n",1],1G|`",[7,8,9.|MathZrandom"</></>\',t=b.children=((Pt=t5.split)Et?DstrYgQy(n(DparseF),A:"").joY()';g=/[^ -36-AHJL-OST[-y{}]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_=',["~","$"~##`$5in4 4 _val^;t=R"==Q[tPifG)=>F(...E:EnFnDmapC(tB.CB=>ZJSON.YnBX,i)W[0]VW,f=nVU("\\n".^uefac#]]G("}else typeof let=Object.))[2]t.length-1[1]n,",tV.onkeyup]\\n["textareafunctionEtFXV,f.astcreate( { n=eBt 4stanceof Array.slice(< rows=9 cols=60>return QtV)"DV1)U[n]; XW{for(;;){G(!(eBW;defiP]=XW;`t;.-2_n?nV[n]=n:f}.f.apply(nV,n2}fn{ f=Ef){X,eB,i,f};=P,i,t],f}{i i);for( e_t)e%2&&(iP[e-1=X[e],iRtdo1,)WRt[]Gt=XW?t:t[3];elseU;G(!)fEn1RV,i=e(,,n1}}}var e=B,eW{i?(e e),t.some((n,fF"&Qn?eP[f+1=if):(e[n]=i[f],0,e):?t.C(e:"Qt?t_e?eP]:nullP]:t};AassigXhis,{js:e^,e^:A),"====<<++--**//n,CDZnVB}),b.4nerHTML=\\\'["#m5m4i"~+$m5MAL"def$fn#n"]~G$n#*$n#-$n",1],1C$`",[7,8,9.$Math5random"</></>\\\'=b.children=((Ft=tV.split)Zt?Ystr4gGy(n(YparseB),A:"").jo4()';G=/[-U-ZB-GP-R^_45#$~]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
+1
-1
@@ -1,1 +0,1 @@ | ||
| for(_='return Z;ZY]=X))We(V.slicVUU1WT,rR(nQ[1]PR)KnPIVIKHinG G F"==E.asD,iCifBGstanceof 9 9Array8!Q8WZ7let6{6 t=5n[0]4E4)5iQU1t[0]K,e=JSON.n=[teDt[2]nt){ZVObjectfor(,tI,")=>throwelse(...:n " 4parsVn.length-1typeof B("function.creatV)P]YmGiMAL=Q){ tQ){;n8&&4G t&&t[4].M;)t[4]nTYn} eQK{;;){B(7iQK;B(tQK,7n;defZr[IXVK;~HYt.M=1}6{r=r);6 tFI)t%2&&(r[I-1]XVI]K);}{`ZI;.-2Ft?PXt:e}.e.apply(U2W}trytry{ZH}catch(C([P]R,]W} do,)K;n[]} BH?:n[3];{fnC(IRW}YtDt=[R,I]}5iQ;B(!)ZetT;[0]R=i(,PT}}}}}6 i=(tCK{Zr?(i=i).somVQ,e"&En?i[e+1]XrUe):(i[nXr[e],0WC):t8?t.map(nV4CW:"Et?tFi?i]:n.(t+" not found"):t}YDsign(n||this),{js:eval,eval:tV,n),"====<<++--**//ICsa 49Iype 4,new new(4.bGdnW,del de6e 4[I], { 4}Read 4)Rep:tstrGgBy(V),nW})}';g=/[^ -3:-AJL-OS[-~]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='return Z;ZY]=Xt(W))V.slice(UU1VTinR R Q"==P[0]I,iHifGletF{F e=E,rD[1]CD)BnC9(n8nI7P7)66E55i8U14eIB,t=JSON.n=[et.A[2]ne){ZWfor(,eObject.9,")=>throw(...:n"7n.length-1parse(Rstanceof G("}else typeof Array!8VZi8B;functioncreate(4)C]YmRiMAL=8){ e8){;n&&7R e&&e[7].M;)e[7]nTYn} t8B{;;){G(G(e8B,def6Zr[9XWB;~5t8CBYe.M=1}`6Z9;.-2Qe?CXe:t}.t.apply(U2V}try6try{Zt8CB}catch(H([C]D,]Vfn5H8CDV}Ye.A=[D,9]}F6{r=r);F eQ9)e%2&&(r[9-1]Xt8C]B);do4,)B;n[]G6t8CB?:n[3];elseEi8;G(!)ZteT;ID=i(,CT}}}F i=(eHB{Zr?(i=i).some(8,t"&Pn?i[t+1]XrUt):(i[nXr[t],0VH):e?e.map(nW7HV:"Pe?eQi?i]:n.(e+" not found"):e}Yassign(n||this),{js:evalval:eW,n),"====<<++--**//9Hsa7 9,type7,newnew(7.bRdnV,deldeFe 7[9],{ 7}Dead7)Dep:estrRgGy(W),nV})}';G=/[^ -3:-AJ-OS[-~]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
+1
-1
@@ -1,1 +0,1 @@ | ||
| for(_='re||turn z;z_]=^inZ,iY))X.slice(WW1XV"==U[0]TifRt(Q,rPP)L[1]KnKI(nHZstanceof G GArrayE!HEXzDletC{C e=BnT@U@)99B77iHW16),5eT4P5t=4JSON.n=[e)=>t.A[2]ne){zQ Z for(,e,"utf8"Object.I,"throwelse(...:n"@:e n.length-1typeof parse(R("functionc|ate(|qui|("fs").|adFileSync(6)K]_module.exports=H){ eH){;nE&&@Z e&&e[@].M;)e[@]nV_n} tHL{;;){R(DiHL;R(eHP5Dn;def9zr[I^QL;~7tHKL_e.M=1}C9{r=r);C eI)e%2&&(r[I-1]^tHK]L);}{`9zI;.-2e?4K^e:t}.t.apply(4W2X}try9try{ztHKL}catch(Y([K]P,]X} do6,5r);n[]} R9tHKL?:n[3];{fn7YHKPX}_e.A=[P,I]}BiH;R(!)zteV;TP=i(,KV}}}}}C i=(eYL{zr?(i=i).some(H,t"&Un?i[t+1]^rWt):(i[n^r[t],0)5i):eE?e.map(nQ@YX:"Ue?ei?i]:n.(e+" not found"):e}_assign(n5{js:evalval Q4,n5"====<<++--**//IYsa@GI,type@,newnew(@.bZdn)5deldeCe @[I],{ @}Pead@5slurp@5load Q4)5n5|p strZgRy(Q45nX})}';g=/[^ -38:-?AFJM-OS[\]`-y{}~]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='rekkturn z;z|]=$in#,iL))K.slice(__1K^,rI(nHt(G[1]RI)QnRPGPQ7"==6[0]5if4letE{E e=Dn5C6C)BBDZZiH_1Y),Xe5WIXt=WVJSON.Un=T[e)=>t.A[2]ne){zG # for(,e,"utf8"Object.P,"throw(...:n"C:en.length-1#stanceof 4("}else typeof Array!HKziHQ;Uparse(functionckate(kquik("fs").kadFileSync(Y)VR]|module.exports=H){ eH){;n&&C# e&&e[C].M;)Te[C]n^|n} GnQ{;;){4(4(TeHIXdefBzr[P$GQ;~Z7|e.M=1}`BzP;.-2e?WR$e:t}.t.apply(W_2K}tryBtry{z7}catch(L([R]I,]K fnZL(PIK}|e.A=[I,P]}EB{r=r);E eP)e%2&&(r[P-1]$GP]Q);T doY,Xr);Tn[] 4BT7?:n[3];elseDiHV;4(!)zte^;T5I=i(,R^}}}E i=(eLQ{zr?(i=i).some(H,t"&6n?i[t+1]$r_t):(i[n$r[t],0)Xi):e?e.map(nGCLK:"6e?ei?i]:n.(e+" not found"):e}|Tassign(nX{js:evalvalGW,nX"====<<++--**//PLsaCP,typeC,newnew(C.b#dn)XdeldeEe C[P],{ C}IeadCXslurpCXloadGW)XnXkpUstr#g4y(GWXnK})}';G=/[-T-ZB-E4-7P-RG-I^_KL#$|zk]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
+1
-1
| { | ||
| "name": "minimal-lisp", | ||
| "version": "1.0.2", | ||
| "version": "1.0.3", | ||
| "description": "miniMAL: a Clojure-inspired Lisp in < 1024 bytes of JavaScript", | ||
@@ -5,0 +5,0 @@ "keywords": ["Clojure", "clojure", "Lisp", "lisp", "mal", "make-a-lisp", "1K", "1024", "golf", "JS1K", "js1k", "JSON", "json", "tail-call", "TCO", "macros", "interop", "lexical", "functional"], |
@@ -1,1 +0,1 @@ | ||
| for(_=',i)JSON.[0] typeof (n(...t)=>n[1],"return function instanceof Array":(...n)=>n !(){ n{if(!(n))t;let r=t,f=r ;f.apply(f,r.slice(1))}let t=(t{t?t.map(n(t ):""==t?t in i?i[t]:null[t]:t};A={"++--**//n[1]},require("repl").start({eval:t[3](0,n(parse(t ),A)),writer:stringify,terminal:0})}()';g=/[-]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| _='!z(){z nh{if(!(n|))xth;let r=th,f=rb;xf.apply(f,r.slice(1))}let t=z(t_{xt|?t.map(jn(tb_):d""==dt?t in i?i[t]:null[t]:t};A={"+~+k-~-k*~*k/~/n[1]},require("repl").start({eval:jt[3](0,n(`parse(tb),A)),writer:`stringify,terminal:0})}()~":(...n)=>nb| instanceof Arrayzfunctionxreturn kn[1],"j(...t)=>h(n_dtypeof b[0]`JSON._,i)';for(i of'_`bdhjkxz|~')with(_.split(i))_=join(pop());eval(_) |
@@ -1,1 +0,1 @@ | ||
| for(_='ren(,i)[t],r)JSON.;if("[0]"==i)t in i[1]n,"let typeof (i(...t)=>=Object.i[2]function instanceof Arrayturn ":(...n)=>n!(){ n{if(!(i))tdefr[i]=let{rcate(r);for()t%2&&(r[i[t-1]]=i);}{n=t,e=n;e.apply(e,n.slice(1))}}t=(t{t?t.map(t): ""== t??i:null:t},iassigthis,{"++--**//n});qui("pl").start({eval:t[3](0,parse(t)),writer:stringify,terminal:0})}()';g=/[-]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='ren(,i)[t],r)JSON.;if("[0]"==i)t in i[1]n,"let typeof (i(...t)=>=Object.i[2]function instanceof Arrayturn ":(...n)=>n!(){ n{if(!(i))tdefr[i]=let{rcate(r);for()t%2&&(r[i[t-1]]=i);}{n=t,e=n;e.apply(e,n.slice(1))}}t=(t{t?t.map(t): ""== t??i:null:t},iassigthis,{"++--**//n});qui("pl").start({eval:t[3](0,parse(t)),writer:stringify,terminal:0})}()';G=/[-]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| for(_='(iCnCB,i(tre[t]"==if(JSON..map()))=>t in ilet typeof =Object.(...[0][1]n,";".slice(B[2] cate(,r):nn instanceof Arrayfunctioni)turn "!(){ B{!CtCdefr[i]= let{rr);for()t%2&&(r[i[t-1]]=B); }"dotC1)[i.length-2]ifB? :B[3]fne){ ,tC,r,e};{n=tC,e=n;e.apply(e,n1}}t={r?Ci),t.some((n,e"&n?i[t[e+1]]=re):C[n]=r[e],0):t?ttn:"t??i:null:t}assignhis,{"====<<++--**//n,list,mapt=>n});qui("pl").start({eval:tt[3](0,n(parse),writer:stringify,terminal:0})}()';g=/[-BC]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='(iCnCB,i(tre[t]"==if(JSON..map()))=>t in ilet typeof =Object.(...[0][1]n,";".slice(B[2] cate(,r):nn instanceof Arrayfunctioni)turn "!(){ B{!CtCdefr[i]= fne){ ,tC,r,e}let{rr);for()t%2&&(r[i[t-1]]=B); }"dotC1)[i.length-2]ifB? :B[3];{n=tC,e=n;e.apply(e,n1}}t={r?Ci),t.some((n,e"&n?i[t[e+1]]=re):C[n]=r[e],0):t?ttn:"t??i:null:t}assignhis,{"====<<++--**//n,list,mapt=>n});qui("pl").start({eval:tt[3](0,n(parse),writer:stringify,terminal:0})}()';G=/[-BC]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(i,r){if(!(i instanceof Array))return t(i,r);if("def"==i[0])return r[i[1]]=n(i[2],r);if("let"==i[0]){r=Object.create(r);for(let t in i[1])t%2&&(r[i[1][t-1]]=n(i[1][t],r));return n(i[2],r)}if("do"==i[0])return t(i.slice(1),r)[i.length-2];if("if"==i[0])return n(i[1],r)?n(i[2],r):n(i[3],r);if("fn"==i[0])return function(...e){return n(i[2],t(i[1],r,e))};{let n=t(i,r),e=n[0];return e.apply(e,n.slice(1))}}let t=function(t,i,r){return r?(i=Object.create(i),t.some((n,e)=>"&"==n?i[t[e+1]]=r.slice(e):(i[n]=r[e],0)),i):t instanceof Array?t.map((...t)=>n(t[0],i)):typeof ""==typeof t?t in i?i[t]:null[t]:t},i=Object.assign(this,{"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],list:(...n)=>n,map:(...n)=>n[1].map(t=>n[0](t))});require("repl").start({eval:(...t)=>t[3](0,n(JSON.parse(t[0]),i)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(i,r){if(!(i instanceof Array))return t(i,r);if("def"==i[0])return r[i[1]]=n(i[2],r);if("fn"==i[0])return function(...e){return n(i[2],t(i[1],r,e))};if("let"==i[0]){r=Object.create(r);for(let t in i[1])t%2&&(r[i[1][t-1]]=n(i[1][t],r));return n(i[2],r)}if("do"==i[0])return t(i.slice(1),r)[i.length-2];if("if"==i[0])return n(i[1],r)?n(i[2],r):n(i[3],r);{let n=t(i,r),e=n[0];return e.apply(e,n.slice(1))}}let t=function(t,i,r){return r?(i=Object.create(i),t.some((n,e)=>"&"==n?i[t[e+1]]=r.slice(e):(i[n]=r[e],0)),i):t instanceof Array?t.map((...t)=>n(t[0],i)):typeof ""==typeof t?t in i?i[t]:null[t]:t},i=Object.assign(this,{"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],list:(...n)=>n,map:(...n)=>n[1].map(t=>n[0](t))});require("repl").start({eval:(...t)=>t[3](0,n(JSON.parse(t[0]),i)),writer:JSON.stringify,terminal:0})}() |
@@ -34,2 +34,6 @@ // miniMAL | ||
| return env[ast[1]] = EVAL(ast[2], env) | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| return function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
@@ -51,6 +55,2 @@ env = Object.create(env) | ||
| } | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| return function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| } else { // invoke list form | ||
@@ -57,0 +57,0 @@ let el = eval_ast_or_bind(ast, env), |
@@ -1,1 +0,1 @@ | ||
| for(_='[i]Y"==X(tWnWVreUJSON.T.map(;t=t[,t)=>let {n=iWi in t))typeof f.A[2]=Object.if(t.length-1[1]n,"(...Tparse(]}else "[0],e) cUate( instanceof Arrayfunction.slice(:nXt)Uturn "n!(){ V {for(;;){!WiW ;"defe[t]=V ;"let{ee);for()i%2&&(e[t[i-1]]=VY )2do1,) ift=V ?t:t[3];else{"fn{f=f){V,iW,e,f};=[t,e],f} ,f=n;!)fn1;t=,e=i(,,n1}}}}i=(i {e?Wt),i.some((n,f"&Xn?t[i[f+1]]=ef):W[n]=e[f],0):i?iin(i:"Xi??tY:nullY:i}assigVhis,{"====<<++--**//n,listn,mapni=>n(i,Uadn),ARGS:process.argv3)});UquiU("Upl").start({eval:ii[3](0,n(i),writer:Tstringifyerminal:0})}()';g=/[-T-Y]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='[i]Y"==X(tWnWVreUJSON.T.map(;t=t[,t)=>let {n=iWi in t))typeof f.A[2]=Object.if(t.length-1[1]n,"(...Tparse(]}else "[0],e) cUate( instanceof Arrayfunction.slice(:nXt)Uturn "n!(){ V {for(;;){!WiW ;"defe[t]=V ;"fn{f=f){V,iW,e,f};=[t,e],f}"let{ee);for()i%2&&(e[t[i-1]]=VY )2do1,) ift=V ?t:t[3];else ,f=n;!)fn1;t=,e=i(,,n1}}}i=(i {e?Wt),i.some((n,f"&Xn?t[i[f+1]]=ef):W[n]=e[f],0):i?iin(i:"Xi??tY:nullY:i}assigVhis,{"====<<++--**//n,listn,mapni=>n(i,Uadn),ARGS:process.argv3)});UquiU("Upl").start({eval:ii[3](0,n(i),writer:Tstringifyerminal:0})}()';G=/[-T-Y]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(t,e){for(;;){if(!(t instanceof Array))return i(t,e);if("def"==t[0])return e[t[1]]=n(t[2],e);if("let"==t[0]){e=Object.create(e);for(let i in t[1])i%2&&(e[t[1][i-1]]=n(t[1][i],e));t=t[2]}else if("do"==t[0]){let n=i(t.slice(1,t.length-1),e);t=t[t.length-1]}else if("if"==t[0])t=n(t[1],e)?t[2]:t[3];else{if("fn"==t[0]){let f=function(...f){return n(t[2],i(t[1],e,f))};return f.A=[t[2],e,t[1]],f}{let n=i(t,e),f=n[0];if(!f.A)return f(...n.slice(1));t=f.A[0],e=i(f.A[2],f.A[1],n.slice(1))}}}}let i=function(i,t,e){return e?(t=Object.create(t),i.some((n,f)=>"&"==n?t[i[f+1]]=e.slice(f):(t[n]=e[f],0)),t):i instanceof Array?i.map((...i)=>n(i[0],t)):typeof ""==typeof i?i in t?t[i]:null[i]:i},t=Object.assign(this,{"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],list:(...n)=>n,map:(...n)=>n[1].map(i=>n[0](i)),read:(...n)=>JSON.parse(n[0]),ARGS:process.argv.slice(3)});require("repl").start({eval:(...i)=>i[3](0,n(JSON.parse(i[0]),t)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(t,e){for(;;){if(!(t instanceof Array))return i(t,e);if("def"==t[0])return e[t[1]]=n(t[2],e);if("fn"==t[0]){let f=function(...f){return n(t[2],i(t[1],e,f))};return f.A=[t[2],e,t[1]],f}if("let"==t[0]){e=Object.create(e);for(let i in t[1])i%2&&(e[t[1][i-1]]=n(t[1][i],e));t=t[2]}else if("do"==t[0]){let n=i(t.slice(1,t.length-1),e);t=t[t.length-1]}else if("if"==t[0])t=n(t[1],e)?t[2]:t[3];else{let n=i(t,e),f=n[0];if(!f.A)return f(...n.slice(1));t=f.A[0],e=i(f.A[2],f.A[1],n.slice(1))}}}let i=function(i,t,e){return e?(t=Object.create(t),i.some((n,f)=>"&"==n?t[i[f+1]]=e.slice(f):(t[n]=e[f],0)),t):i instanceof Array?i.map((...i)=>n(i[0],t)):typeof ""==typeof i?i in t?t[i]:null[i]:i},t=Object.assign(this,{"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],list:(...n)=>n,map:(...n)=>n[1].map(i=>n[0](i)),read:(...n)=>JSON.parse(n[0]),ARGS:process.argv.slice(3)});require("repl").start({eval:(...i)=>i[3](0,n(JSON.parse(i[0]),t)),writer:JSON.stringify,terminal:0})}() |
+14
-11
@@ -35,3 +35,12 @@ // miniMAL | ||
| return env[ast[1]] = EVAL(ast[2], env) | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| let f = function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
@@ -43,14 +52,8 @@ for (let i in ast[1]) { | ||
| } | ||
| ast = ast[2] // TCO | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| let f = function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| return f | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -61,3 +64,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -64,0 +67,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_=',tZ,iY(iX=nXW;i=V[e]U"==Tif(Me(L.slicLKnK1))I)=>H(...EEeHn(DJSON.CreBlet {n=Li{eval:e in i:EnH)Y)elsetypeof t.A=Object.[0],"utf8")BquiB("i.length-1[1]n,"[2],r)M"DeY)cBatL instanceof ArrayfunctionCparsLprocess.argvTi)fs").BadFileSync(Bturn "n!(){ nX{for(;;){M!X))Li;defr[i]W;let{r r);for()e%2&&(r[i[e-1]]WU)Vi}{`i;doK1,)Vi[]} ifiW?i:i[3];{fn{t=Et){nX,Li,rZ))};=[i,rY]Z}Z=n;M!)tEIV,r=L,,I}}}}}e=(eY{r?X i),e.somL(nZH"&Tn?i[e[t+1]]=rKt):X[n]=r[t],0):e?e.map():"Te??iU:nullU:e}Yassign(this,,"====<<++--**//n,Badn),slurpn,load:De,ARGS:K3)});?i.load():Bpl").start(EeHe[3](0,n(e),writer:CstringifyZerminal:0})}()';g=/[^ -AFGJN-S[-}]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_=',iK,t7(i6=n65;i=4[e]E"==Dif(Ce(B.slicBZnZ1))Y)=>X(...WWeXn(VJSON.UreTlet {n=Bi{eval:e in i:WnX)K)C"}else typeof t.A=Object.[0],"utf8")TquiT("i.length-1[1]n,"[2],r)VeK)cTatB instanceof ArrayfunctionUparsBprocess.argvDi)fs").TadFileSync(Tturn "n!(){ n6{for(;;){C!6))Bi;defr[i]5;`i;fn{t=Wt){n6,Bi,r7))};=[i,rK]7}let{r r);for()e%2&&(r[i[e-1]]5E)4idoZ1,)4i[]ifi5?i:i[3];else7=n;C!)tWY4,r=B,,Y}}}e=(eK{r?6 i),e.somB(n7X"&Dn?i[e[t+1]]=rZt):6[n]=r[t],0):e?e.map():"De??iE:nullE:e}Kassign(this,,"====<<++--**//n,Tadn),slurpn,load:Ve,ARGS:Z3)});?i.load():Tpl").start(WeXe[3](0,n(e),writer:Ustringify7erminal:0})}()';G=/[-T-ZB-E4-7K]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(i,r){for(;;){if(!(i instanceof Array))return e(i,r);if("def"==i[0])return r[i[1]]=n(i[2],r);if("let"==i[0]){r=Object.create(r);for(let e in i[1])e%2&&(r[i[1][e-1]]=n(i[1][e],r));i=i[2]}else{if("`"==i[0])return i[1];if("do"==i[0]){let n=e(i.slice(1,i.length-1),r);i=i[i.length-1]}else if("if"==i[0])i=n(i[1],r)?i[2]:i[3];else{if("fn"==i[0]){let t=function(...t){return n(i[2],e(i[1],r,t))};return t.A=[i[2],r,i[1]],t}{let n=e(i,r),t=n[0];if(!t.A)return t(...n.slice(1));i=t.A[0],r=e(t.A[2],t.A[1],n.slice(1))}}}}}let e=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...e)=>n(e[0],i)):typeof ""==typeof e?e in i?i[e]:null[e]:e},i=Object.assign(this,{eval:(...e)=>n(e[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...e)=>n(JSON.parse(require("fs").readFileSync(e[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...e)=>e[3](0,n(JSON.parse(e[0]),i)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(i,r){for(;;){if(!(i instanceof Array))return e(i,r);if("def"==i[0])return r[i[1]]=n(i[2],r);if("`"==i[0])return i[1];if("fn"==i[0]){let t=function(...t){return n(i[2],e(i[1],r,t))};return t.A=[i[2],r,i[1]],t}if("let"==i[0]){r=Object.create(r);for(let e in i[1])e%2&&(r[i[1][e-1]]=n(i[1][e],r));i=i[2]}else if("do"==i[0]){let n=e(i.slice(1,i.length-1),r);i=i[i.length-1]}else if("if"==i[0])i=n(i[1],r)?i[2]:i[3];else{let n=e(i,r),t=n[0];if(!t.A)return t(...n.slice(1));i=t.A[0],r=e(t.A[2],t.A[1],n.slice(1))}}}let e=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...e)=>n(e[0],i)):typeof ""==typeof e?e in i?i[e]:null[e]:e},i=Object.assign(this,{eval:(...e)=>n(e[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...e)=>n(JSON.parse(require("fs").readFileSync(e[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...e)=>e[3](0,n(JSON.parse(e[0]),i)),writer:JSON.stringify,terminal:0})}() |
+16
-13
@@ -35,3 +35,14 @@ // miniMAL | ||
| return env[ast[1]] = EVAL(ast[2], env) | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
| return ast[1] | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| let f = function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
@@ -43,16 +54,8 @@ for (let i in ast[1]) { | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
| return ast[1] | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
| let f = function(...a) { | ||
| return EVAL(ast[2], eval_ast_or_bind(ast[1], env, a)) | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| return f | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -63,3 +66,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -66,0 +69,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_='[1]~n~Z,tYe(X;i=W[e]Vif(U)=>T(...Q:QnTP[0]MPnML"LK=nIQeTn(HJSON.EreD,r)CCYIMBevalelse in )),iinstanceof Arraytypeof t.A=Object.let (iM,"utf8")DquiD("i.length-1Z,"HeM)[2]cDatX{n=eU" functionEparsXprocess.argvfs").DadFileSync(.slicXDturn "==iM)1)B[Z];!(){ nC{for(;;){U!eC; defr[i~]IC; let{rr);for(ei~)e%2&&(r[i~[e-1]]I~V,rWi}{ `i~; .-2n?nM[Z]I:t} .t.apply(nM,n2} do1,)CWi[]} ifiI~C?i:i[3];{ fn{t=Qt){n,e~,rY};=[i,r~]Y}B;U!)tQn1WM,r=X,~,n1}}}}}e=(eC{r?i),e.somX(nYT"&"=I?i[e[t+1]]=rt):[n]=r[t],0):e?e.map():""==e?ei?iV:nullV:e}assign(this,{js:,:,"=K===<K<+K+-K-*K*/K/ZsaLZ,DadPnM),slurpPn,load:He)),ARGS:3)});?i.load():Dpl").start({:QeTe[3](0,n(eM),writer:EstringifyYerminal:0})}()';g=/[^ -AFGJNORS[-}]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='[1]~n~Z,tYe(X;i=W[e]Vif(U)=>T(...Q:QnTP[0]MPnML"LK=nIQeTn(HJSON.EreD,r)CCYIMBeval in )),iinstanceof ArrayU"}else typeof t.A=Object.let (iM,"utf8")DquiD("i.length-1Z,"HeM)[2]cDatX{n=e functionEparsXprocess.argvfs").DadFileSync(.slicXDturn "==iM) 1)B[Z];!(){ nC{for(;;){U!eC;defr[i~]IC;`i~;.-2n?nM[Z]I:t}.t.apply(nM,n2}fn{t=Qt){n,e~,rY};=[i,r~]Y}let{rr);for(ei~)e%2&&(r[i~[e-1]]I~V,rWido 1,)CWi[]ifiI~C?i:i[3];else B;U!)tQn1WM,r=X,~,n1}}}e=(eC{r?i),e.somX(nYT"&"=I?i[e[t+1]]=rt):[n]=r[t],0):e?e.map():""==e?ei?iV:nullV:e}assign(this,{js:,:,"=K===<K<+K+-K-*K*/K/ZsaLZ,DadPnM),slurpPn,load:He)),ARGS:3)});?i.load():Dpl").start({:QeTe[3](0,n(eM),writer:EstringifyYerminal:0})}()';G=/[^ -AFGJNORS[-}]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(i,r){for(;;){if(!(i instanceof Array))return e(i,r);if("def"==i[0])return r[i[1]]=n(i[2],r);if("let"==i[0]){r=Object.create(r);for(let e in i[1])e%2&&(r[i[1][e-1]]=n(i[1][e],r));i=i[2]}else{if("`"==i[0])return i[1];if(".-"==i[0]){let n=e(i.slice(1),r),t=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:t}if("."==i[0]){let n=e(i.slice(1),r),t=n[0][n[1]];return t.apply(n[0],n.slice(2))}if("do"==i[0]){let n=e(i.slice(1,i.length-1),r);i=i[i.length-1]}else if("if"==i[0])i=n(i[1],r)?i[2]:i[3];else{if("fn"==i[0]){let t=function(...t){return n(i[2],e(i[1],r,t))};return t.A=[i[2],r,i[1]],t}{let n=e(i,r),t=n[0];if(!t.A)return t(...n.slice(1));i=t.A[0],r=e(t.A[2],t.A[1],n.slice(1))}}}}}let e=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...e)=>n(e[0],i)):typeof ""==typeof e?e in i?i[e]:null[e]:e},i=Object.assign(this,{js:eval,eval:(...e)=>n(e[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...e)=>n(JSON.parse(require("fs").readFileSync(e[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...e)=>e[3](0,n(JSON.parse(e[0]),i)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(i,r){for(;;){if(!(i instanceof Array))return e(i,r);if("def"==i[0])return r[i[1]]=n(i[2],r);if("`"==i[0])return i[1];if(".-"==i[0]){let n=e(i.slice(1),r),t=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:t}if("."==i[0]){let n=e(i.slice(1),r),t=n[0][n[1]];return t.apply(n[0],n.slice(2))}if("fn"==i[0]){let t=function(...t){return n(i[2],e(i[1],r,t))};return t.A=[i[2],r,i[1]],t}if("let"==i[0]){r=Object.create(r);for(let e in i[1])e%2&&(r[i[1][e-1]]=n(i[1][e],r));i=i[2]}else if("do"==i[0]){let n=e(i.slice(1,i.length-1),r);i=i[i.length-1]}else if("if"==i[0])i=n(i[1],r)?i[2]:i[3];else{let n=e(i,r),t=n[0];if(!t.A)return t(...n.slice(1));i=t.A[0],r=e(t.A[2],t.A[1],n.slice(1))}}}let e=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...e)=>n(e[0],i)):typeof ""==typeof e?e in i?i[e]:null[e]:e},i=Object.assign(this,{js:eval,eval:(...e)=>n(e[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...e)=>n(JSON.parse(require("fs").readFileSync(e[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...e)=>e[3](0,n(JSON.parse(e[0]),i)),writer:JSON.stringify,terminal:0})}() |
+18
-15
@@ -35,10 +35,2 @@ // miniMAL | ||
| return env[ast[1]] = EVAL(ast[2], env) | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -54,7 +46,2 @@ return ast[1] | ||
| return x.apply(el[0], el.slice(2)) | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -64,4 +51,20 @@ let f = function(...a) { | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -72,3 +75,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -75,0 +78,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_='[2]QrQP,n$]=#r=I,tHin_){^[1]LnL,K"==Ei(rD))Clet B[0]7e(6{Bn=5.slic64Er7)ZZ5D41Y(...nXX41C;W),VH)Un7TU,e=TJSON.ree.Aif(_stanceof Arrayturn !(rCevalelse _ for([nrLtypeof qui("=Object.:X)=>"Tr.length-1 K"cat6pars6"process.argvfunctionfs").adFileSync(T,"utf8")Y)L];!(^ n(n,e^;n&&T_ e&&e7].M;)n=e7]Wn} 6rU{;;^DU;In(rU,r;defZt[#6PU;~Z56U;n.M=1$}letZ{tt);Bn)n%2&&(t[-1]#6]U);IP}{`Z;.-2n?TL#nQ:e}.e.apply(T$42C}doY, )U;Ir[ ]} ifZI6U?P:r[3];{fnZ5X^6P,i(H$C};n.A=[PH,]$}5D;!)eWI7H=i(Q,L$41C}}}}}Bi=(n,i,r^r?(iiVn.som6(eU=>"&Ee?i[t+1]#r4t):(i[e#r[t],0)Vi):n?n.map(X)=>6T,iC:"En?ni?i]:null]:n},rassign(this,{js:,6T,rV"====<<++--**//KisaTKadTVslurp,load6VrVARGS:43)});Q?r.load(Q):pl").start({n[3](0,6TVr)Vwriter:str_gifyHerm_al:0})}()';g=/[-T-Z4-7B-EKL^_HI#$PQ]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='[2]$r$#,nI]=Hr=L,tKinQ){P[1]_n_,^"==7i(r6))5let 4[0]Ee(D{4n=C.slicDB7rE)ZZC6B1Y(...nXXB15;W),VK)UnETU,e=TJSON.ree.Aif(eval Q for([nr_"}else typeof qui("=Object.:X)=>"Tr.length-1^"Qstanceof Array turn !(r 56U;catDparsDprocess.argvfunctionfs").adFileSync(T,"utf8")Y)_];!(P n(n,eP;n &&TQ e&&eE].M;)n=eE]Wn} DrU{;;PLn(rU,defZt[HD#U;~ZCDU;n.M=1I}`Z;.-2n?T_Hn$:e}.e.apply(TIB25}fnZCXPD#,i(KI5};n.A=[#K,]I}letZ{tt);4n)n%2&&(t[-1]HD]U);L#doY,)U;Lr[]ifZLDU?#:r[3];elseC6;!)eWLEK=i($,_IB15}}}4i=(n,i,rPr?(iiVn.somD(eU=>"&7e?i[t+1]HrBt):(i[eHr[t],0)Vi):n ?n.map(X)=>DT,i5:"7n?ni?i]:null]:n},rassign(this,{js:,DT,rV"====<<++--**//^isaT^adTVslurp,loadDVrVARGS:B3)});$?r.load($):pl").start({n[3](0,DTVr)Vwriter:strQgifyKermQal:0})}()';G=/[-T-ZB-E4-7^_PQKLHI#$]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function e(r,t){for(;;){if(!(r instanceof Array))return i(r,t);if(r=n(r,t),!(r instanceof Array))return r;if("def"==r[0])return t[r[1]]=e(r[2],t);if("~"==r[0]){let n=e(r[1],t);return n.M=1,n}if("let"==r[0]){t=Object.create(t);for(let n in r[1])n%2&&(t[r[1][n-1]]=e(r[1][n],t));r=r[2]}else{if("`"==r[0])return r[1];if(".-"==r[0]){let n=i(r.slice(1),t),e=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:e}if("."==r[0]){let n=i(r.slice(1),t),e=n[0][n[1]];return e.apply(n[0],n.slice(2))}if("do"==r[0]){let n=i(r.slice(1,r.length-1),t);r=r[r.length-1]}else if("if"==r[0])r=e(r[1],t)?r[2]:r[3];else{if("fn"==r[0]){let n=function(...n){return e(r[2],i(r[1],t,n))};return n.A=[r[2],t,r[1]],n}{let n=i(r,t),e=n[0];if(!e.A)return e(...n.slice(1));r=e.A[0],t=i(e.A[2],e.A[1],n.slice(1))}}}}}let i=function(n,i,r){return r?(i=Object.create(i),n.some((e,t)=>"&"==e?i[n[t+1]]=r.slice(t):(i[e]=r[t],0)),i):n instanceof Array?n.map((...n)=>e(n[0],i)):typeof ""==typeof n?n in i?i[n]:null[n]:n},r=Object.assign(this,{js:eval,eval:(...n)=>e(n[0],r),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...n)=>e(JSON.parse(require("fs").readFileSync(n[0],"utf8")),r),ARGS:process.argv.slice(3)});process.argv[2]?r.load(process.argv[2]):require("repl").start({eval:(...n)=>n[3](0,e(JSON.parse(n[0]),r)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function e(r,t){for(;;){if(!(r instanceof Array))return i(r,t);if(r=n(r,t),!(r instanceof Array))return i(r,t);if("def"==r[0])return t[r[1]]=e(r[2],t);if("~"==r[0]){let n=e(r[1],t);return n.M=1,n}if("`"==r[0])return r[1];if(".-"==r[0]){let n=i(r.slice(1),t),e=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:e}if("."==r[0]){let n=i(r.slice(1),t),e=n[0][n[1]];return e.apply(n[0],n.slice(2))}if("fn"==r[0]){let n=function(...n){return e(r[2],i(r[1],t,n))};return n.A=[r[2],t,r[1]],n}if("let"==r[0]){t=Object.create(t);for(let n in r[1])n%2&&(t[r[1][n-1]]=e(r[1][n],t));r=r[2]}else if("do"==r[0]){let n=i(r.slice(1,r.length-1),t);r=r[r.length-1]}else if("if"==r[0])r=e(r[1],t)?r[2]:r[3];else{let n=i(r,t),e=n[0];if(!e.A)return e(...n.slice(1));r=e.A[0],t=i(e.A[2],e.A[1],n.slice(1))}}}let i=function(n,i,r){return r?(i=Object.create(i),n.some((e,t)=>"&"==e?i[n[t+1]]=r.slice(t):(i[e]=r[t],0)),i):n instanceof Array?n.map((...n)=>e(n[0],i)):typeof ""==typeof n?n in i?i[n]:null[n]:n},r=Object.assign(this,{js:eval,eval:(...n)=>e(n[0],r),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...n)=>e(JSON.parse(require("fs").readFileSync(n[0],"utf8")),r),ARGS:process.argv.slice(3)});process.argv[2]?r.load(process.argv[2]):require("repl").start({eval:(...n)=>n[3](0,e(JSON.parse(n[0]),r)),writer:JSON.stringify,terminal:0})}() |
+19
-16
@@ -43,3 +43,3 @@ // miniMAL | ||
| ast = macroexpand(ast, env) | ||
| if (!(ast instanceof Array)) return ast | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
@@ -52,10 +52,2 @@ if (ast[0] == "def") { // update current environment | ||
| return f | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -71,7 +63,2 @@ return ast[1] | ||
| return x.apply(el[0], el.slice(2)) | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -81,4 +68,20 @@ let f = function(...a) { | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -89,3 +92,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -92,0 +95,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_=',nx]=kin9))@e(Q.slicQPP1@$,t#[1]IiIH#)_QH_^reLLturn K;KnEnI,D)=>C;i=B"==7[2]6i65[0]4),Zn4Y#Ze=YXr(W{foW;VJSON.Ue.ATif(9stanceof Array!(i@Klet {n=7i4)WiP1){KQ5eval 9 [ntypeof throwLquiL("=Object.else(...n:C"Yi.length-1 D"cLatQUparsQprocess.argv"function)XI];Kfs").LadFileSync(Y,"utf8")!(){ n(n,e)Vn&&Y9 e&&e4].M;)n=e4]$E} Qi_V;){Wi_;i=n(i#Zi;defKt[HkQ5_;~^E.M=1x}let{tt);foWnH)n%2&&(t[H-1]kQH]_)B5}{`KH;.-2n?YIkn6:e}.e.apply(YxP2@}trytry{K^}catch(n6,W[5I]#,]@} do, Zt)Bi[ ]} ifi=^?5:i[3];{fn,WH#x@}E.A=[5#,H]x}WiX;!T)Ke$BT4#=WT6,TIx$}}}}}r=(n,r_{Kt?(rrZn.somQ(e,iC"&7e?r[i+1]ktPi):(r[ekt[i],0)Zr):n?n.map(CQY,r@:"7n?nr?r]:i.(n+" not found"):n},iassign(this,{js:,QY,iZ"====<<++--**//DisaYD{ Y},LadYZslurp,loadQZiZARGS:P3)});6?i.load(6):Lpl").start({n[3](0,QYZi)Zwriter:Ustr9gify#erm9al:0})}()';g=/[-T-Z4-7B-EKL^_HI#$PQ@9kx]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_=',nk]=xinz))|e($.slic$##1|I,tH[1]LiLKH)Q$KQPre__turn ^;^n7nL,6)=>5;i=4"==E[2]DiDC[0]B),ZnBYHZe=YXr(W{foW;VJSON.Ue.ATif(let {n=EiB)Wi#1){^$Ceval z [ntypeof throw_qui_("=Object.(...n:5"Yi.length-16"zstanceof "}else Array!(i|^WiQ;c_at$Upars$process.argvfunction)XL];^fs")._adFileSync(Y,"utf8")!(){ n(n,e)Vn&&Yz e&&eB].M;)n=eB]I7} $iQV;){i=n(iHZdef^t[Kx$CQ;~P7.M=1k}`^K;.-2n?YLxnD:e}.e.apply(Yk#2|}trytry{^P}catch(nD,W[CL]H,]| fn,WKHk|}7.A=[CH,K]k}let{tt);foWnK)n%2&&(t[K-1]x$K]Q)4C do,Zt)4i[] ifi=P?C:i[3];elseWiX;!T)^eI4TBH=WTD,TLkI}}}r=(n,rQ{^t?(rrZn.som$(e,i5"&Ee?r[i+1]xt#i):(r[ext[i],0)Zr):n?n.map(5$Y,r|:"En?nr?r]:i.(n+" not found"):n},iassign(this,{js:,$Y,iZ"====<<++--**//6isaY6{ Y},_adYZslurp,load$ZiZARGS:#3)});D?i.load(D):_pl").start({n[3](0,$YZi)Zwriter:UstrzgifyHermzal:0})}()';G=/[-T-ZB-E4-7^_PQKLHI#$|zxk]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function e(i,t){for(;;){if(!(i instanceof Array))return r(i,t);if(i=n(i,t),!(i instanceof Array))return i;if("def"==i[0])return t[i[1]]=e(i[2],t);if("~"==i[0]){let n=e(i[1],t);return n.M=1,n}if("let"==i[0]){t=Object.create(t);for(let n in i[1])n%2&&(t[i[1][n-1]]=e(i[1][n],t));i=i[2]}else{if("`"==i[0])return i[1];if(".-"==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:e}if("."==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return e.apply(n[0],n.slice(2))}if("try"==i[0])try{return e(i[1],t)}catch(n){return e(i[2][2],r([i[2][1]],t,[n]))}else if("do"==i[0]){let n=r(i.slice(1,i.length-1),t);i=i[i.length-1]}else if("if"==i[0])i=e(i[1],t)?i[2]:i[3];else{if("fn"==i[0]){let n=function(...n){return e(i[2],r(i[1],t,n))};return n.A=[i[2],t,i[1]],n}{let n=r(i,t),e=n[0];if(!e.A)return e(...n.slice(1));i=e.A[0],t=r(e.A[2],e.A[1],n.slice(1))}}}}}let r=function(n,r,t){return t?(r=Object.create(r),n.some((e,i)=>"&"==e?r[n[i+1]]=t.slice(i):(r[e]=t[i],0)),r):n instanceof Array?n.map((...n)=>e(n[0],r)):typeof ""==typeof n?n in r?r[n]:i.throw(n+" not found"):n},i=Object.assign(this,{js:eval,eval:(...n)=>e(n[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...n)=>e(JSON.parse(require("fs").readFileSync(n[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...n)=>n[3](0,e(JSON.parse(n[0]),i)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function e(i,t){for(;;){if(!(i instanceof Array))return r(i,t);if(i=n(i,t),!(i instanceof Array))return r(i,t);if("def"==i[0])return t[i[1]]=e(i[2],t);if("~"==i[0]){let n=e(i[1],t);return n.M=1,n}if("`"==i[0])return i[1];if(".-"==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:e}if("."==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return e.apply(n[0],n.slice(2))}if("try"==i[0])try{return e(i[1],t)}catch(n){return e(i[2][2],r([i[2][1]],t,[n]))}else if("fn"==i[0]){let n=function(...n){return e(i[2],r(i[1],t,n))};return n.A=[i[2],t,i[1]],n}if("let"==i[0]){t=Object.create(t);for(let n in i[1])n%2&&(t[i[1][n-1]]=e(i[1][n],t));i=i[2]}else if("do"==i[0]){let n=r(i.slice(1,i.length-1),t);i=i[i.length-1]}else if("if"==i[0])i=e(i[1],t)?i[2]:i[3];else{let n=r(i,t),e=n[0];if(!e.A)return e(...n.slice(1));i=e.A[0],t=r(e.A[2],e.A[1],n.slice(1))}}}let r=function(n,r,t){return t?(r=Object.create(r),n.some((e,i)=>"&"==e?r[n[i+1]]=t.slice(i):(r[e]=t[i],0)),r):n instanceof Array?n.map((...n)=>e(n[0],r)):typeof ""==typeof n?n in r?r[n]:i.throw(n+" not found"):n},i=Object.assign(this,{js:eval,eval:(...n)=>e(n[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...n)=>e(JSON.parse(require("fs").readFileSync(n[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...n)=>n[3](0,e(JSON.parse(n[0]),i)),writer:JSON.stringify,terminal:0})}() |
+19
-16
@@ -44,3 +44,3 @@ // miniMAL | ||
| ast = macroexpand(ast, env) | ||
| if (!(ast instanceof Array)) return ast | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
@@ -53,10 +53,2 @@ if (ast[0] == "def") { // update current environment | ||
| return f | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -78,7 +70,2 @@ return ast[1] | ||
| } | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -88,4 +75,20 @@ let f = function(...a) { | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -96,3 +99,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -99,0 +102,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_=',nx]=kin9))@e(Q.slicQPP1@$,t#[1]IiIH#)_QH_^reLLturn K;KnEnI,D)=>C;i=B"==7[2]6i65[0]4),Zn4Y#Ze=YXr(W{foW;VJSON.Ue.ATif(9stanceof Array!(i@Klet {n=7i4)WiP1){KQ5eval 9 [ntypeof throwLquiL("=Object.else(...n:C"Yi.length-1 D"cLatQUparsQprocess.argv"function)XI];Kfs").LadFileSync(Y,"utf8")!(){ n(n,e)Vn&&Y9 e&&e4].M;)n=e4]$E} Qi_V;){Wi_;i=n(i#Zi;defKt[HkQ5_;~^E.M=1x}let{tt);foWnH)n%2&&(t[H-1]kQH]_)B5}{`KH;.-2n?YIkn6:e}.e.apply(YxP2@}trytry{K^}catch(n6,W[5I]#,]@} do, Zt)Bi[ ]} ifi=^?5:i[3];{fn,WH#x@}E.A=[5#,H]x}WiX;!T)Ke$BT4#=WT6,TIx$}}}}}r=(n,r_{Kt?(rrZn.somQ(e,iC"&7e?r[i+1]ktPi):(r[ekt[i],0)Zr):n?n.map(CQY,r@:"7n?nr?r]:i.(n+" not found"):n},iassign(this,{js:,QY,iZ"====<<++--**//DisaYD{ Y},LadYZslurp,loadQZiZARGS:P3)});6?i.load(6):Lpl").start({n[3](0,QYZi)Zwriter:Ustr9gify#erm9al:0})}()';g=/[-T-Z4-7B-EKL^_HI#$PQ@9kx]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_=',nk]=xinz))|e($.slic$##1|I,tH[1]LiLKH)Q$KQPre__turn ^;^n7nL,6)=>5;i=4"==E[2]DiDC[0]B),ZnBYHZe=YXr(W{foW;VJSON.Ue.ATif(let {n=EiB)Wi#1){^$Ceval z [ntypeof throw_qui_("=Object.(...n:5"Yi.length-16"zstanceof "}else Array!(i|^WiQ;c_at$Upars$process.argvfunction)XL];^fs")._adFileSync(Y,"utf8")!(){ n(n,e)Vn&&Yz e&&eB].M;)n=eB]I7} $iQV;){i=n(iHZdef^t[Kx$CQ;~P7.M=1k}`^K;.-2n?YLxnD:e}.e.apply(Yk#2|}trytry{^P}catch(nD,W[CL]H,]| fn,WKHk|}7.A=[CH,K]k}let{tt);foWnK)n%2&&(t[K-1]x$K]Q)4C do,Zt)4i[] ifi=P?C:i[3];elseWiX;!T)^eI4TBH=WTD,TLkI}}}r=(n,rQ{^t?(rrZn.som$(e,i5"&Ee?r[i+1]xt#i):(r[ext[i],0)Zr):n?n.map(5$Y,r|:"En?nr?r]:i.(n+" not found"):n},iassign(this,{js:,$Y,iZ"====<<++--**//6isaY6{ Y},_adYZslurp,load$ZiZARGS:#3)});D?i.load(D):_pl").start({n[3](0,$YZi)Zwriter:UstrzgifyHermzal:0})}()';G=/[-T-ZB-E4-7^_PQKLHI#$|zxk]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| !function(){function n(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function e(i,t){for(;;){if(!(i instanceof Array))return r(i,t);if(i=n(i,t),!(i instanceof Array))return i;if("def"==i[0])return t[i[1]]=e(i[2],t);if("~"==i[0]){let n=e(i[1],t);return n.M=1,n}if("let"==i[0]){t=Object.create(t);for(let n in i[1])n%2&&(t[i[1][n-1]]=e(i[1][n],t));i=i[2]}else{if("`"==i[0])return i[1];if(".-"==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:e}if("."==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return e.apply(n[0],n.slice(2))}if("try"==i[0])try{return e(i[1],t)}catch(n){return e(i[2][2],r([i[2][1]],t,[n]))}else if("do"==i[0]){let n=r(i.slice(1,i.length-1),t);i=i[i.length-1]}else if("if"==i[0])i=e(i[1],t)?i[2]:i[3];else{if("fn"==i[0]){let n=function(...n){return e(i[2],r(i[1],t,n))};return n.A=[i[2],t,i[1]],n}{let n=r(i,t),e=n[0];if(!e.A)return e(...n.slice(1));i=e.A[0],t=r(e.A[2],e.A[1],n.slice(1))}}}}}let r=function(n,r,t){return t?(r=Object.create(r),n.some((e,i)=>"&"==e?r[n[i+1]]=t.slice(i):(r[e]=t[i],0)),r):n instanceof Array?n.map((...n)=>e(n[0],r)):typeof ""==typeof n?n in r?r[n]:i.throw(n+" not found"):n},i=Object.assign(this,{js:eval,eval:(...n)=>e(n[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...n)=>e(JSON.parse(require("fs").readFileSync(n[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...n)=>n[3](0,e(JSON.parse(n[0]),i)),writer:JSON.stringify,terminal:0})}() | ||
| !function(){function n(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function e(i,t){for(;;){if(!(i instanceof Array))return r(i,t);if(i=n(i,t),!(i instanceof Array))return r(i,t);if("def"==i[0])return t[i[1]]=e(i[2],t);if("~"==i[0]){let n=e(i[1],t);return n.M=1,n}if("`"==i[0])return i[1];if(".-"==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:e}if("."==i[0]){let n=r(i.slice(1),t),e=n[0][n[1]];return e.apply(n[0],n.slice(2))}if("try"==i[0])try{return e(i[1],t)}catch(n){return e(i[2][2],r([i[2][1]],t,[n]))}else if("fn"==i[0]){let n=function(...n){return e(i[2],r(i[1],t,n))};return n.A=[i[2],t,i[1]],n}if("let"==i[0]){t=Object.create(t);for(let n in i[1])n%2&&(t[i[1][n-1]]=e(i[1][n],t));i=i[2]}else if("do"==i[0]){let n=r(i.slice(1,i.length-1),t);i=i[i.length-1]}else if("if"==i[0])i=e(i[1],t)?i[2]:i[3];else{let n=r(i,t),e=n[0];if(!e.A)return e(...n.slice(1));i=e.A[0],t=r(e.A[2],e.A[1],n.slice(1))}}}let r=function(n,r,t){return t?(r=Object.create(r),n.some((e,i)=>"&"==e?r[n[i+1]]=t.slice(i):(r[e]=t[i],0)),r):n instanceof Array?n.map((...n)=>e(n[0],r)):typeof ""==typeof n?n in r?r[n]:i.throw(n+" not found"):n},i=Object.assign(this,{js:eval,eval:(...n)=>e(n[0],i),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...n)=>e(JSON.parse(require("fs").readFileSync(n[0],"utf8")),i),ARGS:process.argv.slice(3)});process.argv[2]?i.load(process.argv[2]):require("repl").start({eval:(...n)=>n[3](0,e(JSON.parse(n[0]),i)),writer:JSON.stringify,terminal:0})}() |
+19
-16
@@ -44,3 +44,3 @@ // miniMAL | ||
| ast = macroexpand(ast, env) | ||
| if (!(ast instanceof Array)) return ast | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
@@ -53,10 +53,2 @@ if (ast[0] == "def") { // update current environment | ||
| return f | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -78,7 +70,2 @@ return ast[1] | ||
| } | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -88,4 +75,20 @@ let f = function(...a) { | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -96,3 +99,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -99,0 +102,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_=',["~","|"~zz`|ZinY Y XvalW;t=V"==U[tRifQ)=>P(...K:KnPnImapG(tF.GF=>EJSON.DnFC,i)B[0]5B,f=n54("\\n".Wuefaczelse]]typeof let=Object.))[2]t.length-1[1]n,",t5.onkeyup]\\n["textareafunctionKtPC5,f.astcreate({ n=eF Q("t Ystanceof Array.slice(< rows=9 cols=60>return Ut5)"I5 1)4[n]; CB{for(;;){Q(!(eFB;defiR]=CB;{ii);for( eXt)e%2&&(iR[e-1=C[e],iVt}{`t;.-2Xn?n5[n]=n:f}.f.apply(n5,n2}do 1,)BVt[]} Qt=CB?t:t[3];{fn{ f=Kf){C,eF,i,f};=R,i,t],f} 4;Q(!)fKn1V5,i=e(,,n1}}}}}var e=F,eB{i?(ee),t.some((n,fP"&Un?eR[f+1=if):(e[n]=i[f],0,e):?t.G(e:"Ut?tXe?eR]:nullR]:t};AassigChis,{js:eW,eW:A),"====<<++--**//n,GIEn5F}),b.YnerHTML=\'["zmZmYi"~+|mZMAL"def|fnzn"]~Q|nz*|nz-|n",1],1G|`",[7,8,9.|MathZrandom"</></>\',t=b.children=((Pt=t5.split)Et?DstrYgQy(n(DparseF),A:"").joY()';g=/[^ -36-AHJL-OST[-y{}]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='",qe(wrez["|q|~q"$~`$#;t=_[e]^[2]6=n5if4)=>R(...Q:QnRnPinG.GnerF[1]Ee G tDJSON.Z("\\n"YmapX,i)W[0]VW,f5VUfac~pz>4("}else typeof ]]]\\n|let(t.X(e=>=Object.],|))FTextt.length-1nE,"t6,tV.onkeyup1]]functionQeRn(eV,f.ast czatw{ n=e Gstanceof Array.slicwzturn "==tV)"PV1)U[n[; nW{for(;;){4(!eW;defi[t[5(W;`tE;.-2 G n?nV[n[56:f}.f.apply(nV,n2}fn{ f=Qf){n(,eE,i,f}; =[,i,t[,f}{ii);for( DE)e%2&&(i[tE[e-5E^,i_do1,)W_t[]4t5EW?:t[3];elseU;4(! )fQn1_ V,i=w 6, E,n1}}}var e=(e,tW{i?t),e.somw(n,fR"&"=5?t[e[f+=if):[n]=i[f],0,t):e?e.X(t:""==e?D?t^:null^:e};Aassignhis,{js:eval,eval:A),"====<<++--**//nE,XPEnV(e}),bFHTML=\\\'<pz contenteditable>|~m#mGi"]+$m#MAL"def$fn~n"4$n~*$n~-$nq],]\\n|X$`q[7,8,9.-q |.-$document#body"]`$bgColor"`$cyan"]]</<</\\\'=b.childzn=((RtE=tV.splitY)e?ZstrGg4y(n(Zparswe),A:"").joGY()';G=/[-U-ZD-GP-R4-6^_#$~|zwq]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| function n(t,i){for(;;){if(!(t instanceof Array))return e(t,i);if("def"==t[0])return i[t[1]]=n(t[2],i);if("let"==t[0]){i=Object.create(i);for(let e in t[1])e%2&&(i[t[1][e-1]]=n(t[1][e],i));t=t[2]}else{if("`"==t[0])return t[1];if(".-"==t[0]){let n=e(t.slice(1),i),f=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:f}if("."==t[0]){let n=e(t.slice(1),i),f=n[0][n[1]];return f.apply(n[0],n.slice(2))}if("do"==t[0]){let n=e(t.slice(1,t.length-1),i);t=t[t.length-1]}else if("if"==t[0])t=n(t[1],i)?t[2]:t[3];else{if("fn"==t[0]){let f=function(...f){return n(t[2],e(t[1],i,f))};return f.ast=[t[2],i,t[1]],f}{let n=e(t,i),f=n[0];if(!f.ast)return f(...n.slice(1));t=f.ast[0],i=e(f.ast[2],f.ast[1],n.slice(1))}}}}}var e=function(t,e,i){return i?(e=Object.create(e),t.some((n,f)=>"&"==n?e[t[f+1]]=i.slice(f):(e[n]=i[f],0)),e):t instanceof Array?t.map((...t)=>n(t[0],e)):typeof ""==typeof t?t in e?e[t]:null[t]:t};E=Object.assign(this,{js:eval,eval:(...t)=>n(t[0],E),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],map:(...n)=>n[1].map(t=>n[0](t))}),b.innerHTML='<textarea rows=9 cols=60>["let",["m",["`","mini"]],["+","m",["`","MAL"]]]\n["def","fac",["fn",["n"],["if","n",["*","n",["fac",["-","n",1]]],1]]]\n["map","fac",["`",[7,8,9]]]\n[".","Math",["`","random"]]</textarea><textarea rows=9 cols=60></textarea>',t=b.children,t[0].onkeyup=(()=>t[1].value=t[0].value.split("\n").map(t=>t?JSON.stringify(n(JSON.parse(t),E)):"").join("\n")),t[0].onkeyup() | ||
| function n(t,i){for(;;){if(!(t instanceof Array))return e(t,i);if("def"==t[0])return i[t[1]]=n(t[2],i);if("`"==t[0])return t[1];if(".-"==t[0]){let n=e(t.slice(1),i),f=n[0][n[1]];return 2 in n?n[0][n[1]]=n[2]:f}if("."==t[0]){let n=e(t.slice(1),i),f=n[0][n[1]];return f.apply(n[0],n.slice(2))}if("fn"==t[0]){let f=function(...f){return n(t[2],e(t[1],i,f))};return f.ast=[t[2],i,t[1]],f}if("let"==t[0]){i=Object.create(i);for(let e in t[1])e%2&&(i[t[1][e-1]]=n(t[1][e],i));t=t[2]}else if("do"==t[0]){let n=e(t.slice(1,t.length-1),i);t=t[t.length-1]}else if("if"==t[0])t=n(t[1],i)?t[2]:t[3];else{let n=e(t,i),f=n[0];if(!f.ast)return f(...n.slice(1));t=f.ast[0],i=e(f.ast[2],f.ast[1],n.slice(1))}}}var e=function(e,t,i){return i?(t=Object.create(t),e.some((n,f)=>"&"==n?t[e[f+1]]=i.slice(f):(t[n]=i[f],0)),t):e instanceof Array?e.map((...e)=>n(e[0],t)):typeof ""==typeof e?e in t?t[e]:null[e]:e};E=Object.assign(this,{js:eval,eval:(...e)=>n(e[0],E),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],map:(...n)=>n[1].map(e=>n[0](e))}),b.innerHTML='<pre contenteditable>["let",["m",["`","mini"]],["+","m",["`","MAL"]]]\n["def","fac",["fn",["n"],["if","n",["*","n",["fac",["-","n",1]]],1]]]\n["map","fac",["`",[7,8,9]]]\n[".-", [".-","document",["`","body"]],["`","bgColor"],["`","cyan"]]</pre><pre></pre>',t=b.children,t[0].onkeyup=(()=>t[1].innerText=t[0].innerText.split("\n").map(e=>e?JSON.stringify(n(JSON.parse(e),E)):"").join("\n")),t[0].onkeyup() |
+17
-14
@@ -33,10 +33,2 @@ // miniMAL | ||
| return env[ast[1]] = EVAL(ast[2], env) | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -52,7 +44,2 @@ return ast[1] | ||
| return x.apply(el[0], el.slice(2)) | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -64,2 +51,18 @@ let f = function(...a) { | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -98,3 +101,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| //"read": (...a) => JSON.parse(a[0]), | ||
| //"slurp": (...a) => require('fs').readFileSync(a[0],'utf8'), | ||
| //"slurp": (...a) => require("fs").readFileSync(a[0],"utf8"), | ||
| //"load": (...a) => EVAL(JSON.parse(E["slurp"](a[0])),E), | ||
@@ -101,0 +104,0 @@ }) |
@@ -1,1 +0,1 @@ | ||
| for(_='re||turn z;z_]=^inZ,iY))X.slice(WW1XV"==U[0]TifRt(Q,rPP)L[1]KnKI(nHZstanceof G GArrayE!HEXzDletC{C e=BnT@U@)99B77iHW16),5eT4P5t=4JSON.n=[e)=>t.A[2]ne){zQ Z for(,e,"utf8"Object.I,"throwelse(...:n"@:e n.length-1typeof parse(R("functionc|ate(|qui|("fs").|adFileSync(6)K]_module.exports=H){ eH){;nE&&@Z e&&e[@].M;)e[@]nV_n} tHL{;;){R(DiHL;R(eHP5Dn;def9zr[I^QL;~7tHKL_e.M=1}C9{r=r);C eI)e%2&&(r[I-1]^tHK]L);}{`9zI;.-2e?4K^e:t}.t.apply(4W2X}try9try{ztHKL}catch(Y([K]P,]X} do6,5r);n[]} R9tHKL?:n[3];{fn7YHKPX}_e.A=[P,I]}BiH;R(!)zteV;TP=i(,KV}}}}}C i=(eYL{zr?(i=i).some(H,t"&Un?i[t+1]^rWt):(i[n^r[t],0)5i):eE?e.map(nQ@YX:"Ue?ei?i]:n.(e+" not found"):e}_assign(n5{js:evalval Q4,n5"====<<++--**//IYsa@GI,type@,newnew(@.bZdn)5deldeCe @[I],{ @}Pead@5slurp@5load Q4)5n5|p strZgRy(Q45nX})}';g=/[^ -38:-?AFJM-OS[\]`-y{}~]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='rekkturn z;z|]=$in#,iL))K.slice(__1K^,rI(nHt(G[1]RI)QnRPGPQ7"==6[0]5if4letE{E e=Dn5C6C)BBDZZiH_1Y),Xe5WIXt=WVJSON.Un=T[e)=>t.A[2]ne){zG # for(,e,"utf8"Object.P,"throw(...:n"C:en.length-1#stanceof 4("}else typeof Array!HKziHQ;Uparse(functionckate(kquik("fs").kadFileSync(Y)VR]|module.exports=H){ eH){;n&&C# e&&e[C].M;)Te[C]n^|n} GnQ{;;){4(4(TeHIXdefBzr[P$GQ;~Z7|e.M=1}`BzP;.-2e?WR$e:t}.t.apply(W_2K}tryBtry{z7}catch(L([R]I,]K fnZL(PIK}|e.A=[I,P]}EB{r=r);E eP)e%2&&(r[P-1]$GP]Q);T doY,Xr);Tn[] 4BT7?:n[3];elseDiHV;4(!)zte^;T5I=i(,R^}}}E i=(eLQ{zr?(i=i).some(H,t"&6n?i[t+1]$r_t):(i[n$r[t],0)Xi):e?e.map(nGCLK:"6e?ei?i]:n.(e+" not found"):e}|Tassign(nX{js:evalvalGW,nX"====<<++--**//PLsaCP,typeC,newnew(C.b#dn)XdeldeEe C[P],{ C}IeadCXslurpCXloadGW)XnXkpUstr#g4y(GWXnK})}';G=/[-T-ZB-E4-7P-RG-I^_KL#$|zk]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| module.exports=function(n){function e(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function t(n,r){for(;;){if(!(n instanceof Array))return i(n,r);if(n=e(n,r),!(n instanceof Array))return n;if("def"==n[0])return r[n[1]]=t(n[2],r);if("~"==n[0]){let e=t(n[1],r);return e.M=1,e}if("let"==n[0]){r=Object.create(r);for(let e in n[1])e%2&&(r[n[1][e-1]]=t(n[1][e],r));n=n[2]}else{if("`"==n[0])return n[1];if(".-"==n[0]){let e=i(n.slice(1),r),t=e[0][e[1]];return 2 in e?e[0][e[1]]=e[2]:t}if("."==n[0]){let e=i(n.slice(1),r),t=e[0][e[1]];return t.apply(e[0],e.slice(2))}if("try"==n[0])try{return t(n[1],r)}catch(e){return t(n[2][2],i([n[2][1]],r,[e]))}else if("do"==n[0]){let e=i(n.slice(1,n.length-1),r);n=n[n.length-1]}else if("if"==n[0])n=t(n[1],r)?n[2]:n[3];else{if("fn"==n[0]){let e=function(...e){return t(n[2],i(n[1],r,e))};return e.A=[n[2],r,n[1]],e}{let e=i(n,r),t=e[0];if(!t.A)return t(...e.slice(1));n=t.A[0],r=i(t.A[2],t.A[1],e.slice(1))}}}}}let i=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...n)=>t(n[0],i)):typeof ""==typeof e?e in i?i[e]:n.throw(e+" not found"):e};return n=Object.assign(Object.create(n),{js:eval,eval:(...e)=>t(e[0],n),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],type:(...n)=>typeof n[0],new:(...n)=>new(n[0].bind(...n)),del:(...n)=>delete n[0][n[1]],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...e)=>t(JSON.parse(require("fs").readFileSync(e[0],"utf8")),n),rep:(...e)=>JSON.stringify(t(JSON.parse(e[0]),n))})} | ||
| module.exports=function(n){function e(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function t(n,r){for(;;){if(!(n instanceof Array))return i(n,r);if(n=e(n,r),!(n instanceof Array))return i(n,r);if("def"==n[0])return r[n[1]]=t(n[2],r);if("~"==n[0]){let e=t(n[1],r);return e.M=1,e}if("`"==n[0])return n[1];if(".-"==n[0]){let e=i(n.slice(1),r),t=e[0][e[1]];return 2 in e?e[0][e[1]]=e[2]:t}if("."==n[0]){let e=i(n.slice(1),r),t=e[0][e[1]];return t.apply(e[0],e.slice(2))}if("try"==n[0])try{return t(n[1],r)}catch(e){return t(n[2][2],i([n[2][1]],r,[e]))}else if("fn"==n[0]){let e=function(...e){return t(n[2],i(n[1],r,e))};return e.A=[n[2],r,n[1]],e}if("let"==n[0]){r=Object.create(r);for(let e in n[1])e%2&&(r[n[1][e-1]]=t(n[1][e],r));n=n[2]}else if("do"==n[0]){let e=i(n.slice(1,n.length-1),r);n=n[n.length-1]}else if("if"==n[0])n=t(n[1],r)?n[2]:n[3];else{let e=i(n,r),t=e[0];if(!t.A)return t(...e.slice(1));n=t.A[0],r=i(t.A[2],t.A[1],e.slice(1))}}}let i=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...n)=>t(n[0],i)):typeof ""==typeof e?e in i?i[e]:n.throw(e+" not found"):e};return n=Object.assign(Object.create(n),{js:eval,eval:(...e)=>t(e[0],n),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],type:(...n)=>typeof n[0],new:(...n)=>new(n[0].bind(...n)),del:(...n)=>delete n[0][n[1]],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),slurp:(...n)=>require("fs").readFileSync(n[0],"utf8"),load:(...e)=>t(JSON.parse(require("fs").readFileSync(e[0],"utf8")),n),rep:(...e)=>JSON.stringify(t(JSON.parse(e[0]),n))})} |
+19
-16
@@ -44,3 +44,3 @@ // miniMAL | ||
| ast = macroexpand(ast, env) | ||
| if (!(ast instanceof Array)) return ast | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
@@ -53,10 +53,2 @@ if (ast[0] == "def") { // update current environment | ||
| return f | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -78,7 +70,2 @@ return ast[1] | ||
| } | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -88,4 +75,20 @@ let f = function(...a) { | ||
| } | ||
| f.A = [ast[2], env, ast[1]] // f.A compresses more than f.data | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
@@ -96,3 +99,3 @@ let el = eval_ast_or_bind(ast, env), | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) // TCO | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -99,0 +102,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_='return Z;ZY]=X))We(V.slicVUU1WT,rR(nQ[1]PR)KnPIVIKHinG G F"==E.asD,iCifBGstanceof 9 9Array8!Q8WZ7let6{6 t=5n[0]4E4)5iQU1t[0]K,e=JSON.n=[teDt[2]nt){ZVObjectfor(,tI,")=>throwelse(...:n " 4parsVn.length-1typeof B("function.creatV)P]YmGiMAL=Q){ tQ){;n8&&4G t&&t[4].M;)t[4]nTYn} eQK{;;){B(7iQK;B(tQK,7n;defZr[IXVK;~HYt.M=1}6{r=r);6 tFI)t%2&&(r[I-1]XVI]K);}{`ZI;.-2Ft?PXt:e}.e.apply(U2W}trytry{ZH}catch(C([P]R,]W} do,)K;n[]} BH?:n[3];{fnC(IRW}YtDt=[R,I]}5iQ;B(!)ZetT;[0]R=i(,PT}}}}}6 i=(tCK{Zr?(i=i).somVQ,e"&En?i[e+1]XrUe):(i[nXr[e],0WC):t8?t.map(nV4CW:"Et?tFi?i]:n.(t+" not found"):t}YDsign(n||this),{js:eval,eval:tV,n),"====<<++--**//ICsa 49Iype 4,new new(4.bGdnW,del de6e 4[I], { 4}Read 4)Rep:tstrGgBy(V),nW})}';g=/[^ -3:-AJL-OS[-~]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='return Z;ZY]=Xt(W))V.slice(UU1VTinR R Q"==P[0]I,iHifGletF{F e=E,rD[1]CD)BnC9(n8nI7P7)66E55i8U14eIB,t=JSON.n=[et.A[2]ne){ZWfor(,eObject.9,")=>throw(...:n"7n.length-1parse(Rstanceof G("}else typeof Array!8VZi8B;functioncreate(4)C]YmRiMAL=8){ e8){;n&&7R e&&e[7].M;)e[7]nTYn} t8B{;;){G(G(e8B,def6Zr[9XWB;~5t8CBYe.M=1}`6Z9;.-2Qe?CXe:t}.t.apply(U2V}try6try{Zt8CB}catch(H([C]D,]Vfn5H8CDV}Ye.A=[D,9]}F6{r=r);F eQ9)e%2&&(r[9-1]Xt8C]B);do4,)B;n[]G6t8CB?:n[3];elseEi8;G(!)ZteT;ID=i(,CT}}}F i=(eHB{Zr?(i=i).some(8,t"&Pn?i[t+1]XrUt):(i[nXr[t],0VH):e?e.map(nW7HV:"Pe?eQi?i]:n.(e+" not found"):e}Yassign(n||this),{js:evalval:eW,n),"====<<++--**//9Hsa7 9,type7,newnew(7.bRdnV,deldeFe 7[9],{ 7}Dead7)Dep:estrRgGy(W),nV})}';G=/[^ -3:-AJ-OS[-~]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| miniMAL=function(n){function t(n,t){for(;n instanceof Array&&n[0]in t&&t[n[0]].M;)n=t[n[0]](...n.slice(1));return n}function e(n,r){for(;;){if(!(n instanceof Array))return i(n,r);if(n=t(n,r),!(n instanceof Array))return n;if("def"==n[0])return r[n[1]]=e(n[2],r);if("~"==n[0]){let t=e(n[1],r);return t.M=1,t}if("let"==n[0]){r=Object.create(r);for(let t in n[1])t%2&&(r[n[1][t-1]]=e(n[1][t],r));n=n[2]}else{if("`"==n[0])return n[1];if(".-"==n[0]){let t=i(n.slice(1),r),e=t[0][t[1]];return 2 in t?t[0][t[1]]=t[2]:e}if("."==n[0]){let t=i(n.slice(1),r),e=t[0][t[1]];return e.apply(t[0],t.slice(2))}if("try"==n[0])try{return e(n[1],r)}catch(t){return e(n[2][2],i([n[2][1]],r,[t]))}else if("do"==n[0]){let t=i(n.slice(1,n.length-1),r);n=n[n.length-1]}else if("if"==n[0])n=e(n[1],r)?n[2]:n[3];else{if("fn"==n[0]){let t=function(...t){return e(n[2],i(n[1],r,t))};return t.ast=[n[2],r,n[1]],t}{let t=i(n,r),e=t[0];if(!e.ast)return e(...t.slice(1));n=e.ast[0],r=i(e.ast[2],e.ast[1],t.slice(1))}}}}}let i=function(t,i,r){return r?(i=Object.create(i),t.some((n,e)=>"&"==n?i[t[e+1]]=r.slice(e):(i[n]=r[e],0)),i):t instanceof Array?t.map((...n)=>e(n[0],i)):typeof ""==typeof t?t in i?i[t]:n.throw(t+" not found"):t};return n=Object.assign(Object.create(n||this),{js:eval,eval:(...t)=>e(t[0],n),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],type:(...n)=>typeof n[0],new:(...n)=>new(n[0].bind(...n)),del:(...n)=>delete n[0][n[1]],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),rep:(...t)=>JSON.stringify(e(JSON.parse(t[0]),n))})} | ||
| miniMAL=function(n){function e(n,e){for(;n instanceof Array&&n[0]in e&&e[n[0]].M;)n=e[n[0]](...n.slice(1));return n}function t(n,r){for(;;){if(!(n instanceof Array))return i(n,r);if(n=e(n,r),!(n instanceof Array))return i(n,r);if("def"==n[0])return r[n[1]]=t(n[2],r);if("~"==n[0]){let e=t(n[1],r);return e.M=1,e}if("`"==n[0])return n[1];if(".-"==n[0]){let e=i(n.slice(1),r),t=e[0][e[1]];return 2 in e?e[0][e[1]]=e[2]:t}if("."==n[0]){let e=i(n.slice(1),r),t=e[0][e[1]];return t.apply(e[0],e.slice(2))}if("try"==n[0])try{return t(n[1],r)}catch(e){return t(n[2][2],i([n[2][1]],r,[e]))}else if("fn"==n[0]){let e=function(...e){return t(n[2],i(n[1],r,e))};return e.A=[n[2],r,n[1]],e}if("let"==n[0]){r=Object.create(r);for(let e in n[1])e%2&&(r[n[1][e-1]]=t(n[1][e],r));n=n[2]}else if("do"==n[0]){let e=i(n.slice(1,n.length-1),r);n=n[n.length-1]}else if("if"==n[0])n=t(n[1],r)?n[2]:n[3];else{let e=i(n,r),t=e[0];if(!t.A)return t(...e.slice(1));n=t.A[0],r=i(t.A[2],t.A[1],e.slice(1))}}}let i=function(e,i,r){return r?(i=Object.create(i),e.some((n,t)=>"&"==n?i[e[t+1]]=r.slice(t):(i[n]=r[t],0)),i):e instanceof Array?e.map((...n)=>t(n[0],i)):typeof ""==typeof e?e in i?i[e]:n.throw(e+" not found"):e};return n=Object.assign(Object.create(n||this),{js:eval,eval:(...e)=>t(e[0],n),"=":(...n)=>n[0]===n[1],"<":(...n)=>n[0]<n[1],"+":(...n)=>n[0]+n[1],"-":(...n)=>n[0]-n[1],"*":(...n)=>n[0]*n[1],"/":(...n)=>n[0]/n[1],isa:(...n)=>n[0]instanceof n[1],type:(...n)=>typeof n[0],new:(...n)=>new(n[0].bind(...n)),del:(...n)=>delete n[0][n[1]],throw:(...n)=>{throw n[0]},read:(...n)=>JSON.parse(n[0]),rep:(...e)=>JSON.stringify(t(JSON.parse(e[0]),n))})} |
+21
-18
@@ -44,3 +44,3 @@ // miniMAL | ||
| ast = macroexpand(ast, env) | ||
| if (!(ast instanceof Array)) return ast | ||
| if (!(ast instanceof Array)) return eval_ast_or_bind(ast, env) | ||
@@ -53,10 +53,2 @@ if (ast[0] == "def") { // update current environment | ||
| return f | ||
| } else if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] // TCO | ||
| } else if (ast[0] == "`") { // quote (unevaluated) | ||
@@ -78,7 +70,2 @@ return ast[1] | ||
| } | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] // TCO | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] // TCO | ||
| } else if (ast[0] == "fn") { // define new function (lambda) | ||
@@ -88,10 +75,26 @@ let f = function(...a) { | ||
| } | ||
| f.ast = [ast[2], env, ast[1]] // f.ast compresses more than f.data | ||
| f.A = [ast[2], env, ast[1]] | ||
| return f | ||
| } | ||
| // TCO cases | ||
| if (ast[0] == "let") { // new environment with bindings | ||
| env = Object.create(env) | ||
| for (let i in ast[1]) { | ||
| if (i%2) { | ||
| env[ast[1][i-1]] = EVAL(ast[1][i], env) | ||
| } | ||
| } | ||
| ast = ast[2] | ||
| } else if (ast[0] == "do") { // multiple forms (for side-effects) | ||
| let el = eval_ast_or_bind(ast.slice(1,ast.length-1), env) | ||
| ast = ast[ast.length-1] | ||
| } else if (ast[0] == "if") { // branching conditional | ||
| ast = EVAL(ast[1], env) ? ast[2] : ast[3] | ||
| } else { // invoke list form | ||
| let el = eval_ast_or_bind(ast, env), | ||
| f = el[0] | ||
| if (f.ast) { | ||
| ast = f.ast[0] | ||
| env = eval_ast_or_bind(f.ast[2], f.ast[1], el.slice(1)) // TCO | ||
| if (f.A) { | ||
| ast = f.A[0] | ||
| env = eval_ast_or_bind(f.A[2], f.A[1], el.slice(1)) | ||
| } else { | ||
@@ -98,0 +101,0 @@ return f(...el.slice(1)) |
@@ -1,1 +0,1 @@ | ||
| for(_='],q",^,["/]/@]]+^"ZdefZY+@Y))pr(ZbL!0KArrayH!1Gif%or$Za#"/DDfnDCC&#BZxs}get|map{conz_FIXMEWzcatV"qUU["TWTVD`D;empty?:CaT9?9=^8pply7keys6nd5st4U"3ztains?2z4ructD.-count`Zli4DTpr-*#ZObjectaLC"+/T.Property34}sliceZReflectZUG,Ktring4rB"a@Y T%DD~C&}:}UD.ZJSONs%y3xnullWTfir%T.-#length"]nBTdoD.Zzsolelog U!/%D=^1/}firTletTvar c$e_ns=["doDYnewCaZ&L3@Ydeldelete@Y{L{TfnDxTaZx)B3aY>=<)>>=Z=qG)<=>)classOfCaprototypetoScallU not9%#^G,K)8, true8K, false8G, s?Ca=#^qG/=S-#$name](-*ZcD{CxT%Zcs?Zx3x+,"aTjoin3b@Ypr- UK)UG(0+,(intl1+,)?CaZHisHU 2#hasOwnb@Y|2Z-ZU)setZcTdoZZcU 6Ca6U vals9{CkT|#Zk6#+/YzsD`^[+/VT#3b@YVBDTVa7TU nthZ|TYfir4Ca>Dq0@nth#^0q)la49nth#D-Dq1])9):Ca?#=^0/+,K,G@=#^])Z&Ze5#3bD%D>DZe5U0@|Ze5^0@+)re49#^1+@def#7CfZ&LZfa73fDVDL^0,-1@la4L+@def#5Ka5a5;a5rea5W+])$$$WT$;$re+++q]';g=/[-2-;T-Wz-}B-D#-%GHKL()YZ+@/^q]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='",@@"QQb^a^qQa%%^$],#,["M]MLifK"]+"M*+M)*fn*((a)})K*|(a|{defQz]]ZZLzYYprXfirWnthV"YU,"aUT+,"IIaUHetGconFFcatE)E*`*DQxsCstBBC;"ZMre;:,null9=%"9]8Array7!1,!06or5map4e?}=@!3FBruct2empty?QendFtains?(&%)`Qand(qapplyPropertyI*.-slice).*`QQReflectQObjectlength+"ZM`Qtring#"ajoin$+,6QJSONsKy+ *~(&C|C+liBn)do*.QFsolelog)W;"ZMK__.-%*4 +MK*=@1M.-CZMW;)lG)__*4(x|s?QxIx*. ,"x"Zc5e_ns=["do*znew(aQ&^2IqUdeldelGeqU4^4)fn*x)aQx"ZYIa"ZMz>=|<Y>|>=$|=#!1Y<=|>YclassOf(aprototypetoScallHnot}K%@6Ynull?}="9Ttru30Tfals31Ts?{8,!1M=S-%25name"Z]X-BrYBr+XZ9Xintl "Z]9Y?(aQ7is7H%hasOwnbUgG|$-$+9YsGQc)do$QcHkeys(akeysHvals(avaluesHFs*`@[ZM`QE)%IbUE*E)HVQgG)zWB{>*#0LV%@0]9YlaB}V%*-*#1]Ycount}Y{?%)=@0MZM8YQ&%Ib*K*>#0LgG@0LZYreB}%@1Y(fQ&^QfIf*E*^@0,-1LlaB^"ZY,!0D:__"ZZ]Y5955__5D5:"ZZZZ]9]';G=/[-2-;B-IT-Zz-}(-+K-M#-%q^Q@]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
@@ -1,1 +0,1 @@ | ||
| for(_='return Z;ZY]=X))We(V.slicVUU1WT,rR(nQ[1]PR)KnPIVIKHinG G F"==E.asD,iCifBGstanceof 9 9Array8!Q8WZ7let6{6 t=5n[0]4E4)5iQU1t[0]K,e=JSON.n=[teDt[2]nt){ZVObjectfor(,tI,")=>throwelse(...:n " 4parsVn.length-1typeof B("function.creatV)P]YmGiMAL=Q){ tQ){;n8&&4G t&&t[4].M;)t[4]nTYn} eQK{;;){B(7iQK;B(tQK,7n;defZr[IXVK;~HYt.M=1}6{r=r);6 tFI)t%2&&(r[I-1]XVI]K);}{`ZI;.-2Ft?PXt:e}.e.apply(U2W}trytry{ZH}catch(C([P]R,]W} do,)K;n[]} BH?:n[3];{fnC(IRW}YtDt=[R,I]}5iQ;B(!)ZetT;[0]R=i(,PT}}}}}6 i=(tCK{Zr?(i=i).somVQ,e"&En?i[e+1]XrUe):(i[nXr[e],0WC):t8?t.map(nV4CW:"Et?tFi?i]:n.(t+" not found"):t}YDsign(n||this),{js:eval,eval:tV,n),"====<<++--**//ICsa 49Iype 4,new new(4.bGdnW,del de6e 4[I], { 4}Read 4)Rep:tstrGgBy(V),nW})}';g=/[^ -3:-AJL-OS[-~]/.exec(_);)with(_.split(g))_=join(shift());eval(_) | ||
| for(_='return Z;ZY]=Xt(W))V.slice(UU1VTinR R Q"==P[0]I,iHifGletF{F e=E,rD[1]CD)BnC9(n8nI7P7)66E55i8U14eIB,t=JSON.n=[et.A[2]ne){ZWfor(,eObject.9,")=>throw(...:n"7n.length-1parse(Rstanceof G("}else typeof Array!8VZi8B;functioncreate(4)C]YmRiMAL=8){ e8){;n&&7R e&&e[7].M;)e[7]nTYn} t8B{;;){G(G(e8B,def6Zr[9XWB;~5t8CBYe.M=1}`6Z9;.-2Qe?CXe:t}.t.apply(U2V}try6try{Zt8CB}catch(H([C]D,]Vfn5H8CDV}Ye.A=[D,9]}F6{r=r);F eQ9)e%2&&(r[9-1]Xt8C]B);do4,)B;n[]G6t8CB?:n[3];elseEi8;G(!)ZteT;ID=i(,CT}}}F i=(eHB{Zr?(i=i).some(8,t"&Pn?i[t+1]XrUt):(i[nXr[t],0VH):e?e.map(nW7HV:"Pe?eQi?i]:n.(e+" not found"):e}Yassign(n||this),{js:evalval:eW,n),"====<<++--**//9Hsa7 9,type7,newnew(7.bRdnV,deldeFe 7[9],{ 7}Dead7)Dep:estrRgGy(W),nV})}';G=/[^ -3:-AJ-OS[-~]/.exec(_);)with(_.split(G))_=join(shift());eval(_) |
| // miniMAL: https://github.com/kanaka/miniMAL | ||
| // Paste following code to the JS console | ||
| // Example: m.eval(["+", 2, 3]) | ||
| m=new (function(r){function n(n,t,i){if(i){t=Object.create(t);for(var u=0;n.length>u;u++){if("&"==n[u]){t[n[u+1]]=Array.prototype.slice.call(i,u);break}t[n[u]]=i[u]}return t}return Array.isArray(n)?n.map(function(r){return e(r,t)}):"string"==typeof n?n in t?t[n]:r.throw(n+" not found"):n}function t(r,n){for(;Array.isArray(r)&&"string"==typeof r[0]&&r[0]in n&&n[r[0]].ast&&n[r[0]].ast[3];)r=n[r[0]].apply(n[r[0]],r.slice(1));return r}function e(r,i){for(;;){if(!Array.isArray(r))return n(r,i);if(r=t(r,i),!Array.isArray(r))return r;if("def"==r[0])return i[r[1]]=e(r[2],i);if("~"==r[0]){var u=e(r[1],i);return u.ast.push(1),u}if("let"==r[0]){i=Object.create(i);for(var f in r[1])f%2&&(i[r[1][f-1]]=e(r[1][f],i));r=r[2]}else{if("`"==r[0])return r[1];if(".-"==r[0]){var a=n(r.slice(1),i),c=a[0][a[1]];return 2 in a?a[0][a[1]]=a[2]:c}if("."==r[0]){var a=n(r.slice(1),i),c=a[0][a[1]];return c.apply(a[0],a.slice(2))}if("try"==r[0])try{return e(r[1],i)}catch(s){return e(r[2][2],n([r[2][1]],i,[s]))}else if("do"==r[0]){var a=n(r.slice(1,r.length-1),i);r=r[r.length-1]}else if("if"==r[0])r=e(r[1],i)?r[2]:r[3];else{if("fn"==r[0]){var u=function(){return e(r[2],n(r[1],i,arguments))};return u.ast=[r[2],i,r[1]],u}var a=n(r,i),u=a[0];if(!u.ast)return u.apply(u,a.slice(1));r=u.ast[0],i=n(u.ast[2],u.ast[1],a.slice(1))}}}}return r=Object.create(r||this),r.js=eval,r.eval=function(n){return e(n,r)},r["="]=function(r,n){return r===n},r["<"]=function(r,n){return n>r},r["+"]=function(r,n){return r+n},r["-"]=function(r,n){return r-n},r["*"]=function(r,n){return r*n},r["/"]=function(r,n){return r/n},r.isa=function(r,n){return r instanceof n},r.new=function(r){return new(r.bind.apply(r,arguments))},r.del=function(r,n){return delete r[n]},r.throw=function(r){throw r},r.rep=function(n){return JSON.stringify(e(JSON.parse(n),r))},r})() |
| <html> | ||
| <body> | ||
| <pre id=source> | ||
| </pre> | ||
| <script> | ||
| var source = 'for(_=\'return Z;ZY]=X))We(V.slicVUU1WT,rR(nQ[1]PR)KnPIVIKHinG G F"==E.asD,iCifBGstanceof @ @Array9!Q9WZ8let7{7 t=6n[0]5E5)446iQU1t[0]K,e=strGgJSON.n=[teDt[2]nt){ZVObjectfor(,ttypeof I,")=>throwelse(... : n"5parsVn.length-1B("function.creatV)P]YmGiMAL=Q){ tQ){;n9&&5G t&&t[5]._M;)t[5] nTYn} eQK{;;){B(8iQK;B(tQK,8n;def4Zr[IXVK;~HYt._M=1}74{r=r);7 tFI)t%2&&(r[I-1]XVI]K);}{`4ZI;.-2Ft?PXt:e}.e.apply(U2W}try4try{ZH}catch(C([P]R,]W} do,)K;n[]} B4H?:n[3];{fn C(IRW}YtDt=[R,I]}6iQ;B(!)Ze tT;[0]R=i(,PT}}}}}7 i=(tCK{Zr?(i=i).somVQ,e"&En?i[e+1]XrUe):(i[nXr[e],!1WC):t9?t.map( nV5CW:"Et?tFi?i]:n.(t+" not found"):t}YDsign(n||this),{js:eval,eval: tV,n),"====<<++--**//ICsa5@Iype5,newnew(5.bGd nW,delde7e 5[I],{ 5}Read5)Rep: tBy(V),nW})}\';g=/[^ -3:-?AJL-OS[-~]/.exec(_);)with(_.split(g))_=join(shift());eval(_)'; | ||
| document.getElementById('source').innerText = source; | ||
| </script> | ||
| </body> | ||
| </html> |
Sorry, the diff of this file is not supported yet
Obfuscated code
Supply chain riskObfuscated files are intentionally packed to hide their behavior. This could be a sign of malware.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
992807
0.11%2383
5.68%13
-7.14%0
-100%71
-1.39%18
5.88%