cumalis-lisp
Version:
A Scheme implementation written in Typescript.
1 lines • 127 kB
JavaScript
"use strict";var e=Object.defineProperty,r=Object.defineProperties,t=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(r,t,n)=>t in r?e(r,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[t]=n,l=(e,r)=>{for(var t in r||(r={}))a.call(r,t)&&i(e,t,r[t]);if(n)for(var t of n(r))o.call(r,t)&&i(e,t,r[t]);return e},s=(e,n)=>r(e,t(n)),c=("undefined"!=typeof require&&require,(e,r,t)=>(i(e,"symbol"!=typeof r?r+"":r,t),t));Object.defineProperty(exports,"__esModule",{value:!0}),exports[Symbol.toStringTag]="Module";const u="cumalis-lisp",m={quote:"'",quasiquote:"`",unquote:",","unquote-splicing":",@"},d=/^(?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])+$/,p={"":"\\a","\b":"\\b","\t":"\\t","\n":"\\n","\r":"\\r",'"':'\\"',"\\":"\\\\","|":"\\|"},f=e=>{let r="",t="";for(const n of e){const e=n.length>2&&0===n.indexOf('""')?n.replace(/^""/,"").replace(/""$/,""):n;r=r+(""===r||"("===t.slice(-1)||")"===n||Object.values(m).indexOf(t)>=0||/^#\d+=$/.test(t)&&"("===n?"":" ")+e,t=n}return r},b=e=>{const r=e=>{const t=[];for(const n of e)if("string"==typeof n)t.push(n);else if(n instanceof Array)if("string"==typeof n[0]&&Object.values(m).includes(n[0]))t.push(...r(n));else if("#"===n[0]||"#u8"===n[0]){if(2!==n.length||!(n[1]instanceof Array))throw new Error("Illegal token tree: #/#u8 must have only one token array");t.push(`${n[0]}(`),t.push(...r(n[1])),t.push(")")}else if("string"==typeof n[0]&&/^#\d+=/.exec(n[0])){if(2!==n.length)throw new Error("Illegal token tree: datum label must have the content");t.push(n[0],...r(n.splice(1)))}else t.push("("),t.push(...r(n)),t.push(")");return t};return r(e)},y=(e,r)=>{const{extended:t=!1,style:n="write",labels:a="cyclic",maxdepth:o=1/0}=null!=r?r:{},i=new Set,l=new Set,s=(e,r,n)=>{if(z.Object(e),!t&&r>o)return;if(!t&&("cyclic"===a&&n.has(e)||"shared"===a&&i.has(e)))return void l.add(e);i.add(e);const c=new Set(n);c.add(e),$.Pair(e)?(s(e[1],r+1,c),s(e[2],r+1,c)):$.Vector(e)&&e[1].forEach((e=>s(e,r+1,c)))};s(e,0,new Set);const c=new Map,u=(e,r,a=!1)=>{var i;if(z.Object(e),!t&&r>o)return"...";if(!a&&!t&&l.has(e)){if(c.has(e))return`#${c.get(e)}#`;{const t=c.size+1;c.set(e,t);return[`#${t}=`,u(e,r,!0)]}}switch(e[0]){case"<symbol>":return t||d.test(e[1])?e[1]:"|"+e[1].replace(/[\x00-\x1f\x7f"|\\]/g,(e=>{var r,t;return null!=(t=p[e])?t:`\\x${null==(r=e.codePointAt(0))?void 0:r.toString(16)}`}))+"|";case"<null>":return t?null:[];case"<string>":return t?e[1]:"display"!==n?'"'+e[1].replace(/[\x00-\x1f\x7f]"|\\/g,(e=>{var r,t;return null!=(t=p[e])?t:`\\x${null==(r=e.codePointAt(0))?void 0:r.toString(16)}`}))+'"':'""'+e[1]+'""';case"<number>":return t?v(e):`${e[1]}`;case"<boolean>":return t?e[1]:e[1]?"#t":"#f";case"<character>":if(t)return e[1];if("display"!==n){const[r]=null!=(i=Object.entries(te).find((([,r])=>r===e[1])))?i:[];return`#\\${null!=r?r:e[1]}`}return'""'+e[1]+'""';case"<vector>":return["#",[...e[1].map((e=>u(e,r+1)))]];case"<bytevector>":return["#u8",[...e[1].map((e=>`${e}`))]];case"<pair>":const[,a,o]=e;if("<null>"===o[0])return[u(a,r+1)];if("<pair>"!==o[0])return[u(a,r+1),".",u(o,r+1)];if("<symbol>"===a[0]&&m[a[1]]){const e=u(o,r+1);return e instanceof Array&&!$.Object(e)?[m[a[1]],...e]:[m[a[1]],e]}{const e=u(a,r+1),t=u(o,r+1);return t instanceof Array&&!$.Object(t)?[e,...t]:[e,".",t]}case"<js>":return t?["&",e[1]]:`#<$js[${null===e[1]?"null":typeof e[1]}]>`;case"<procedure>":return t?e:"built-in"===e[1]?`#<procedure[built-in/${e[2]}]>`:`#<procedure[${e[1]}]>`;default:return t?e:`#${e[0]}`}};return u(e,0)},h=(e,r={})=>{try{const t=y(e,s(l({maxdepth:8},r),{extended:!1})),n=b([t]);return f(n)}catch(t){return"<!!WRITE-ERROR!!>"}},g=(e,r={})=>{const t=y(e,s(l({},r),{extended:!1}));if(!(t instanceof Array&&"begin"===t[0]))throw new Error('fromASTToText error: The top of AST is must be a "begin" expression.');const n=b(t.slice(1));return f(n)},v=e=>"number"==typeof e[1]?e[1]:"+inf.0"===e[1]?1/0:"-inf.0"===e[1]?-1/0:NaN,S=e=>C.Number(Number.isFinite(e)?Number.isNaN(e)?"+nan.0":e:e<0?"-inf.0":"+inf.0"),w=e=>e[2],x=e=>e[1],j=e=>e[2],P=e=>{const r=[];for(let t=e;t;t=j(t))r.push(t);return r},E=e=>e[1],N=e=>["#CALL-STACK#",{depth:0,env:{static:C.StaticNS({},null),dynamic:C.DynamicNS({},null)},expr:e,want:null,oper:null,args:null,before:null,after:null,handler:null,info:$.Pair(e)&&e[4]||null},null],I=(e,r,t={})=>{var n,a,o;const{env:i,handler:l,depth:s,info:c}=E(e);return["#CALL-STACK#",{depth:s+1,env:null!=(n=t.env)?n:i,expr:r,want:null,oper:null,args:null,before:null!=(a=t.before)?a:null,after:null!=(o=t.after)?o:null,handler:l,info:$.Pair(r)&&r[4]||c},e]},B=(e,r,t={})=>{var n,a,o;const{env:i,handler:l,depth:s,info:c,before:u,after:m}=E(e);return["#CALL-STACK#",{depth:s,env:null!=(n=t.env)?n:i,expr:r,want:null!=(a=t.want)?a:null,oper:null!=(o=t.oper)?o:null,args:null,before:void 0===t.before?u:t.before,after:void 0===t.after?m:t.after,handler:void 0!==t.handler?t.handler:l,info:$.Pair(r)&&r[4]||c},j(e)]},O=e=>[e[0],{},e],C={Symbol:(...e)=>["<symbol>",...e],String:(...e)=>["<string>",...e],Number:(...e)=>["<number>",...e],Boolean:(...e)=>["<boolean>",...e],Character:(...e)=>["<character>",...e],Pair:(e,r,t=!1,n)=>n?["<pair>",e,r,t,n]:["<pair>",e,r,t],Null:()=>["<null>"],Vector:(...e)=>["<vector>",...e],ByteVector:(...e)=>["<bytevector>",...e],EndOfFile:(...e)=>["<end-of-file>",...e],Procedure:(...e)=>["<procedure>",...e],Port:(...e)=>["<port>",...e],RecordType:(...e)=>["<record-type>",...e],Record:(...e)=>["<record>",...e],SyntaxRules:(...e)=>["<syntax-rules>",...e],Parameter:(...e)=>["<parameter>",...e],MultiValue:(...e)=>["<multi-value>",...e],Exception:(...e)=>["<exception>",...e],Undefined:(...e)=>["<undefined>",...e],Promise:(...e)=>["<promise>",...e],Error:(e,r,t=[])=>["<error>",e,r,t],Continuation:(...e)=>["<continuation>",...e],EnvironmentSpec:(...e)=>["<environment-spec>",...e],Library:(...e)=>["<library>",...e],JS:(...e)=>["<js>",...e],List:(...e)=>e.reverse().reduce(((e,r)=>["<pair>",r,e,!1]),["<null>"]),Suspend:(...e)=>["#SUSPEND#",...e],JSPromiseContinuation:(...e)=>["#JS-PROMISE-CONTINUATION#",...e],Exit:(...e)=>["#EXIT#",...e],StaticNS:(...e)=>["#STATIC-NS-STACK#",...e],DynamicNS:(...e)=>["#DYNAMIC-NS-STACK#",...e],HandlerStack:(...e)=>["#HANDLER-STACK#",...e]},A={Call:(e,...r)=>C.List(e,...r),CallBuiltIn:(e,...r)=>C.List(C.Procedure("built-in",e),...r),Lambda:(...e)=>$.List(e[0])?A.CallBuiltIn("lambda",...e):A.CallBuiltIn("lambda",J(e[0],e[1]),...e.slice(2)),CallThunk:(...e)=>A.Call(A.CallBuiltIn("lambda",["<null>"],...e)),Begin:(...e)=>A.CallBuiltIn("begin",...e),Quote:e=>A.CallBuiltIn("quote",e),Set:(e,r)=>A.CallBuiltIn("set!",e,r),Raise:e=>A.CallBuiltIn("raise",e),RaiseContinuable:e=>A.CallBuiltIn("raise-continuable",e),Let:(e,...r)=>A.CallBuiltIn("let",C.List(...e.map((e=>C.List(...e)))),...r),If:(e,r,t)=>t?A.CallBuiltIn("if",e,r,t):A.CallBuiltIn("if",e,r),And:(...e)=>A.CallBuiltIn("and",...e),Or:(...e)=>A.CallBuiltIn("or",...e),Cond:(e,...r)=>A.CallBuiltIn("cond",e,...r),Case:(e,r)=>A.CallBuiltIn("case",e,C.List(...r.map((e=>C.List(...e))))),Define:(...e)=>A.CallBuiltIn("define",...e),DefineValues:(e,r)=>A.CallBuiltIn("define-values",$.List(e)?e:C.List(...e),r),Append:(...e)=>A.CallBuiltIn("append",...e),Cons:(...e)=>A.CallBuiltIn("cons",...e),Values:(...e)=>A.CallBuiltIn("values",...e),BeginIfMultiple:(...e)=>0===e.length?["<undefined>"]:1===e.length?e[0]:A.Begin(...e)},$={Symbol:e=>e instanceof Array&&"<symbol>"===e[0],String:e=>e instanceof Array&&"<string>"===e[0],Number:e=>e instanceof Array&&"<number>"===e[0],Boolean:e=>e instanceof Array&&"<boolean>"===e[0],Character:e=>e instanceof Array&&"<character>"===e[0],Pair:e=>e instanceof Array&&"<pair>"===e[0],Null:e=>e instanceof Array&&"<null>"===e[0],Vector:e=>e instanceof Array&&"<vector>"===e[0],ByteVector:e=>e instanceof Array&&"<bytevector>"===e[0],EndOfFile:e=>e instanceof Array&&"<end-of-file>"===e[0],Port:e=>e instanceof Array&&"<port>"===e[0],RecordType:e=>e instanceof Array&&"<record-type>"===e[0],Record:e=>e instanceof Array&&"<record>"===e[0],MultiValue:e=>e instanceof Array&&"<multi-value>"===e[0],SyntaxRules:e=>e instanceof Array&&"<syntax-rules>"===e[0],SyntaxRulePattern:e=>e instanceof Array&&"<syntax-rule-pattern>"===e[0],Parameter:e=>e instanceof Array&&"<parameter>"===e[0],EnvironmentSpec:e=>e instanceof Array&&"<environment-spec>"===e[0],Exception:e=>e instanceof Array&&"<exception>"===e[0],Undefined:e=>e instanceof Array&&"<undefined>"===e[0],Promise:e=>e instanceof Array&&"<promise>"===e[0],Error:e=>e instanceof Array&&"<error>"===e[0],Continuation:e=>e instanceof Array&&"<continuation>"===e[0],Library:e=>e instanceof Array&&"<library>"===e[0],JS:e=>e instanceof Array&&"<js>"===e[0],List:e=>$.Pair(e)||$.Null(e),Procedure:e=>e instanceof Array&&("<procedure>"===e[0]||"<continuation>"===e[0]||"<parameter>"===e[0]),Object:e=>e instanceof Array&&"string"==typeof e[0]&&/^<.*>/.test(e[0]),Evaluatable:e=>$.List(e)||$.Symbol(e),False:e=>$.Boolean(e)&&!1===e[1],RealNumber:e=>$.Number(e)&&"number"==typeof e[1],IntegerNumber:e=>$.Number(e)&&"number"==typeof e[1]&&Number.isInteger(e[1]),Objects:e=>e instanceof Array&&e.every((e=>$.Object(e))),Suspend:e=>e instanceof Array&&"#SUSPEND#"===e[0],JSPromiseContinuation:e=>e instanceof Array&&"#JS-PROMISE-CONTINUATION#"===e[0],Exit:e=>e instanceof Array&&"#EXIT#"===e[0],CallStack:e=>e instanceof Array&&"#CALL-STACK#"===e[0],SpecialObject:e=>e instanceof Array&&"string"==typeof e[0]&&/^#.+#$/.test(e[0]),Dictionary:e=>"object"==typeof e&&!!e&&e.constructor===Object,Stack:e=>e instanceof Array&&3===e.length&&"string"==typeof e[0]&&/^#.*-STACK#$/.test(e[0])},L=(e,r)=>(t,n)=>{if(!e(t))throw C.Error("domain-error",null!=n?n:r)},k=(e,r)=>(t,n)=>{if(!(t instanceof Array))throw C.Error("domain-error",null!=n?n:r);for(const a of t)if(!e(a))throw C.Error("domain-error",null!=n?n:r)},z={List:L($.List,"A <pair> or <null> is expected."),Pair:L($.Pair,"A <pair> is expected."),Symbol:L($.Symbol,"A <symbol> is expected."),Number:L($.Number,"A <number> is expected."),Boolean:L($.Boolean,"A <boolean> is expected."),Object:L($.Object,"A Scheme object is expected."),String:L($.String,"A <string> is expected."),Vector:L($.Vector,"A <vector> is expected."),ByteVector:L($.ByteVector,"A <bytevector> is expected."),Character:L($.Character,"A <character> is expected."),Promise:L($.Promise,"A <promise> is expected."),Error:L($.Error,"A <error> is expected."),Procedure:L($.Procedure,"A <procedure> is expected."),SyntaxRules:L($.SyntaxRules,"A <syntax-rules> is expected."),Parameter:L($.Parameter,"A <parameter> is expected."),EnvironmentSpec:L($.EnvironmentSpec,"A <environment-spec> is expected."),RecordType:L($.RecordType,"A <record-type> is expected."),Record:L($.Record,"A <record> is expected."),MultiValue:L($.MultiValue,"A <multi-value> is expected."),Port:L($.Port,"A <port> is expected."),Library:L($.Library,"A <library> is expected."),Lists:k($.List,"An array of <pair>/<null> is expected."),Pairs:k($.Pair,"An array of <pair> is expected."),Symbols:k($.Symbol,"An array of <symbol> is expected."),Numbers:k($.Number,"An array of <number> is expected."),Booleans:k($.Boolean,"An array of <boolean> is expected."),Objects:k($.Object,"An array of Scheme object is expected."),Strings:k($.String,"An array of <string> is expected."),Vectors:k($.Vector,"An array of <vector> is expected."),ByteVectors:k($.ByteVector,"An array of <bytevector> is expected."),Characters:k($.Character,"An array of <character> is expected."),RealNumber:L($.RealNumber,"A real <number> (not infinite, not NaN) is expected."),IntegerNumber:L($.IntegerNumber,"A integer <number> is expected."),RealNumbers:k($.RealNumber,"An array of real <number> is expected."),IntegerNumbers:k($.IntegerNumber,"An array of integer <number> is expected.")},V=(e,r)=>{if(null==e)throw C.Error("program-error",null!=r?r:"Required object.")},M=e=>"object"==typeof e&&null!==e&&"Object"===e.constructor.name,q=e=>!!e&&"object"==typeof e&&e.language===u&&!!e.version&&($.Object(e.content)||$.SpecialObject(e.content)),T=e=>q(e)&&$.Suspend(e.content),D=e=>q(e)&&$.JSPromiseContinuation(e.content),R=D,Q=Object.prototype.hasOwnProperty,U=e=>{const r=new Set,t=e=>{if($.Pair(e)){const[,n,a]=e;if(r.has(a))throw new Error("Circular list detected.");return r.add(a),[n,...t($.List(a)?a:["<null>"])]}return[]};return t(e)},F=e=>{const r=new Set;return(e=>{const[,t,n]=e;if($.Pair(n)){if(r.has(n))throw new Error("Circular list detected.");r.add(n);const[e,a]=F(n);return[[t,...e],a]}return[[t],n]})(e)},J=(e,r,t=!1,n)=>e.reverse().reduce(((r,a,o)=>n&&o===e.length-1?C.Pair(a,r,t,n):C.Pair(a,r,t)),r||["<null>"]),_=(()=>{let e=0,r=0,t=0;return()=>"::"+"T-S-XXXXXXX".replace(/[TSX]/g,(n=>(r=Date.now(),"T"===n?`0000000000000${r.toString(16)}`.slice(-14):"S"===n?`000${(e===r?(e=r,t=0):t++).toString(16)}`.slice(-4):`000${(65536*Math.random()|0).toString(16)}`.slice(-4))))})(),X=(e,r,t,n=!1,a=!1)=>{if(r.filter((e=>"variadic"===e.type)).length>1)throw new Error("Only one variadic parameter is allowed.");return{name:e,parameters:r,body:t,isMacro:n,hidden:a}},Z=(e,r)=>s(l({},r),{name:e}),K=(e,r)=>e.length===r.length&&e.every(((e,t)=>e===r[t])),W=e=>{var r,t;if($.List(e)){if($.Null(e))return[[],null];{const[t,n]=F(e);return z.Symbols(t),$.Null(n)||z.Symbol(n),[t.map((e=>{var r;return{name:null!=(r=e[3])?r:e[1]}})),$.Null(n)?null:{name:null!=(r=n[3])?r:n[1],type:"variadic"}]}}return z.Symbol(e),[[],{name:null!=(t=e[3])?t:e[1],type:"variadic"}]},G={"µ":"μ","ͅ":"ι","ς":"σ","ϐ":"β","ϑ":"θ","ϕ":"φ","ϖ":"π","ϰ":"κ","ϱ":"ρ","ϵ":"ε","ᏸ":"Ᏸ","ᏹ":"Ᏹ","ᏺ":"Ᏺ","ᏻ":"Ᏻ","ᏼ":"Ᏼ","ᏽ":"Ᏽ","ᲀ":"в","ᲁ":"д","ᲂ":"о","ᲃ":"с","ᲄ":"т","ᲅ":"т","ᲆ":"ъ","ᲇ":"ѣ","ᲈ":"ꙋ","ẛ":"ṡ","ι":"ι","ꭰ":"Ꭰ","ꭱ":"Ꭱ","ꭲ":"Ꭲ","ꭳ":"Ꭳ","ꭴ":"Ꭴ","ꭵ":"Ꭵ","ꭶ":"Ꭶ","ꭷ":"Ꭷ","ꭸ":"Ꭸ","ꭹ":"Ꭹ","ꭺ":"Ꭺ","ꭻ":"Ꭻ","ꭼ":"Ꭼ","ꭽ":"Ꭽ","ꭾ":"Ꭾ","ꮀ":"Ꮀ","ꮁ":"Ꮁ","ꮂ":"Ꮂ","ꮃ":"Ꮃ","ꮄ":"Ꮄ","ꮅ":"Ꮅ","ꮆ":"Ꮆ","ꮇ":"Ꮇ","ꮈ":"Ꮈ","ꮉ":"Ꮉ","ꮊ":"Ꮊ","ꮋ":"Ꮋ","ꮌ":"Ꮌ","ꮍ":"Ꮍ","ꮎ":"Ꮎ","ꮐ":"Ꮐ","ꮑ":"Ꮑ","ꮒ":"Ꮒ","ꮓ":"Ꮓ","ꮔ":"Ꮔ","ꮕ":"Ꮕ","ꮖ":"Ꮖ","ꮗ":"Ꮗ","ꮘ":"Ꮘ","ꮙ":"Ꮙ","ꮚ":"Ꮚ","ꮛ":"Ꮛ","ꮜ":"Ꮜ","ꮝ":"Ꮝ","ꮞ":"Ꮞ","ꮠ":"Ꮠ","ꮡ":"Ꮡ","ꮢ":"Ꮢ","ꮣ":"Ꮣ","ꮤ":"Ꮤ","ꮥ":"Ꮥ","ꮦ":"Ꮦ","ꮧ":"Ꮧ","ꮨ":"Ꮨ","ꮩ":"Ꮩ","ꮪ":"Ꮪ","ꮫ":"Ꮫ","ꮬ":"Ꮬ","ꮭ":"Ꮭ","ꮮ":"Ꮮ","ꮰ":"Ꮰ","ꮱ":"Ꮱ","ꮲ":"Ꮲ","ꮳ":"Ꮳ","ꮴ":"Ꮴ","ꮵ":"Ꮵ","ꮶ":"Ꮶ","ꮷ":"Ꮷ","ꮸ":"Ꮸ","ꮹ":"Ꮹ","ꮺ":"Ꮺ","ꮻ":"Ꮻ","ꮼ":"Ꮼ","ꮽ":"Ꮽ","ꮾ":"Ꮾ"},H=new RegExp("["+Object.keys(G).join("")+"]","gu"),Y=e=>e.replace(H,(e=>G[e])).toLowerCase(),ee=new RegExp("(?:"+[/\s+/.source,/;[^\n]*(?:\n|$)/.source,/(?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])+/.source,/\|(?:[^|\\]|\n|\\(?:.|\n))+\|/.source,/#!(?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])+/.source,/"(?:[^"\\]|\n|\\(?:.|\n))*"/.source,/(?:[()[\]{}'`]|,(?!@)|,@)/.source,/#(?:t(?:rue)?|f(?:alse)?|\(|u8\(|\d+[#=]|;)/.source,/#[dDbBoOxXeEiI](?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])+/.source,/#\\(?:(?:[^A-Za-z]|\n)|[A-Za-z](?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])*)/.source,Array(16).fill(/#\|(?:[^|#]|\|[^#]|#[^|]|\n|(?:NEST))*\|#/.source).reduce(((e,r)=>e.replace("NEST",r)))].join("|")+")","y"),re={a:"",b:"\b",t:"\t",n:"\n",r:"\r"},te={alarm:"",backspace:"\b",delete:"",escape:"",newline:"\n",null:"\0",return:"\r",space:" ",tab:"\t"},ne=(e,r)=>{var t;const n=(e=>{const r=[0],t=/\n/g;for(let n;n=t.exec(e);)r.push(n.index+1);return t=>{var n;const a=r.filter((e=>e<=t)).slice(-1)[0],o=e.slice(a,t);return[r.indexOf(a)+1,o.length+(null!=(n=o.match(/[^\x01-\x7E\xA1-\xDF]/g))?n:[]).length+1]}})(e),a=[];ee.lastIndex=0;let o=!1;for(;ee.lastIndex<e.length;){const i=ee.lastIndex,[l,s]=n(i),c=r?{filename:r,line:l,column:s}:{line:l,column:s};let[u]=null!=(t=ee.exec(e))?t:[];if(null==u){const r=e.slice(i).split(/(\s|\n)+/,2)[0]||e[i],t=r.length>10?r.slice(0,10)+"...":r;throw new Error(`Tokenize failed. Unexpected token is: "${t}": ${JSON.stringify(c)}`)}"#!fold-case"!==u&&"#!no-fold-case"!==u?(o&&(u.match(/^(?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])+$/)||u.match(/#\\(?:(?:[^A-Za-z]|\n)|[A-Za-z](?:[A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])*)/))&&(u=Y(u)),a.push([u,c])):o=!u.includes("#!no-")}return a},ae=e=>{const r=e.filter((e=>!e[0].match(/^(\s|;|#\||#!(no-)?fold-case)/))),t=()=>{const e=[];for(let n=r.shift();n;n=r.shift()){const[r,a]=n;if(!r.match(/^(\s|;|#\|)/))if("("===r)e.push(t().concat(a));else if(["#(","#u8("].includes(r))e.push([r.slice(0,-1),t(),a]);else{if(["'","`",",",",@","#;"].includes(r)||r.match(/^#\d+=$/)){const n=t(),o=n.shift();if(null==o)throw`Unexpected end of source after quoting/datum label "${r}": ${JSON.stringify(a)}`;return"#;"!==r&&e.push([r,o]),e.push(...n),e}if(")"===r)return e;e.push(r)}}return e};return[t(),r]},oe=(e,r=null,t,n=new Map)=>{var a;if("string"==typeof e){let t;if(t=/^([+-])(nan|inf)\.0$/i.exec(e))return C.Number(t[0].toLowerCase());if(t=/^(?:#d)?[-+]?\d+(?:\.\d*)?(?:e[-+]?\d+)?$/i.exec(e))return S(Number(e.replace(/^(#d)?0*/i,"")));if(t=/^(?:#b[-+]?[01]+|#o[-+]?[0-7]+|#x[-+]?[0-9A-Fa-f]+)/i.exec(e))return S(Number(e.replace(/^#([xob])([+-]?)/i,"0$1"))*(e.includes("-")?-1:1));if(/^#[dboxei]/i.exec(e))throw new Error(`Unsupported type of number literal: ${e}: ${JSON.stringify(r)}`);if(t=/^"((?:.|\n)*)"$/.exec(e)){const e=t[1].replace(/\\(x[0-9a-fA-F]+;|[ \t]*\n[ \t]*|[^x \t\n])/g,(e=>{var r;return"x"===e[1]?String.fromCodePoint(Number(`0x${e.replace(/;$/,"").slice(2)}`)):/\s|\n/.test(e[1])?"":null!=(r=re[e[1]])?r:e[1]}));return C.String(e,!0)}if(t=/^#([tf])/.exec(e))return C.Boolean("t"===t[1]);if(t=/^#\\((.|\n)*)$/.exec(e)){const e=1===t[1].length?t[1]:t[1].match(/^x[0-9A-Fa-f]+$/)?String.fromCodePoint(Number(`0x${t[1].slice(1)}`)):te[t[1]];if(!e)throw new Error(`Illegal character literal: ${e}: ${JSON.stringify(r)}`);return C.Character(e)}if("."!==e&&(t=/^(([A-Za-z0-9]|[^\x00-\x7f]|[!$%&*+\-./:<=>?@^_~])+)$/.exec(e)))return C.Symbol(t[1]);if("."!==e&&(t=/^\|(([^\\]|\n|\\(.|\n))+)\|$/.exec(e))){const e=t[1].replace(/\\(x[0-9a-fA-F]+;|\s*\n\s*|[^x\s\n])/g,(e=>{var r;return"x"===e[1]?String.fromCodePoint(Number(`0x${e.replace(/;$/,"").slice(2)}`)):/\s|\n/.test(e[1])?"":null!=(r=re[e[1]])?r:e[1]}));return C.Symbol(e)}if(t=/^#(\d+)#$/.exec(e)){const a=t[1];if(!n.has(a))throw new Error(`Invalid datum reference (${e}): ${JSON.stringify(r)}`);return n.get(a)}throw new Error(`Parse error: unexpected token: "${e}": ${JSON.stringify(r)}`)}if(e instanceof Array&&"&"!==e[0]){r=null!=(a=e.find((e=>M(e))))?a:r;const o=e.filter((e=>!M(e)));if(0===o.length)return C.Null();if(2===o.length&&"."===o[0])return oe(o[1],r,t,n);if("#"===o[0]){if(2!==o.length)throw new Error(`Illegal vector literal. No datum: ${JSON.stringify(r)}`);if(!(o[1]instanceof Array))throw new Error(`Illegal vector literal. Datum is not an array: ${JSON.stringify(r)}`);return C.Vector(o[1].map((e=>oe(e,r,t,n))),!0)}if("#u8"===o[0]){if(2!==o.length)throw new Error(`Illegal byte vector literal. No datum: ${JSON.stringify(r)}`);if(!(o[1]instanceof Array))throw new Error(`Illegal byte vector literal. Byte vector must have an array: ${JSON.stringify(r)}`);const e=o[1].map((e=>oe(e,r,t,n)));if(!e.every((e=>$.RealNumber(e)&&Number.isInteger(e[1])&&e[1]>=0&&e[1]<=255)))throw new Error(`Illegal byte vector literal. All the contents of a byte vector must be 0-255.: ${JSON.stringify(r)}`);return C.ByteVector(e.map(v),!0)}if("string"==typeof o[0]&&["'","`",",",",@"].includes(o[0])){if(2!==o.length)throw new Error(`Illegal quote "${o[0]}". Quoted item must be a datum: ${JSON.stringify(r)}`);const e={"'":"quote","`":"quasiquote",",":"unquote",",@":"unquote-splicing"}[o[0]];return C.Pair(C.Symbol(e),C.Pair(oe(o[1],r,t,n),C.Null(),!0),!0,(null==t?void 0:t.removeLineInfo)?null:r)}if("string"==typeof o[0]&&/^#(\d+)=$/.exec(o[0])){const[,e]=/^#(\d+)=$/.exec(o[0]);if(2!==o.length)throw new Error(`Illegal datum label. No next datum: ${JSON.stringify(r)}`);const a=C.Symbol(o[0]);n.set(e,a);const i=oe(o[1],r,t,n);return a.splice(0,a.length,...i),a}if((null==t?void 0:t.extended)&&$.Object(e))return e;if((null==t?void 0:t.extended)&&"&"===e[0]){if(2!=e.length)throw new Error(`Parse error: JS Node must be like ["&", <object>]: ${typeof e} value: ${e}`);return C.JS("inline",e[1])}return C.Pair(oe(o[0],r,t,n),oe(o.slice(1),r,t,n),!0,(null==t?void 0:t.removeLineInfo)?null:r)}if((null==t?void 0:t.extended)&&null===e)return C.Null();if((null==t?void 0:t.extended)&&"number"==typeof e)return S(e);if((null==t?void 0:t.extended)&&"boolean"==typeof e)return C.Boolean(e);throw new Error(`Parse error: unexpected node type: ${typeof e} value: ${e}`)},ie=(e,r=null,t)=>oe(e,r,s(l({},null!=t?t:{}),{extended:!0})),le=(e,r)=>{const t=ne(e,null==r?void 0:r.filename),[n,a]=ae(t);if(a.length>0)throw new Error(`Parse error: extra tokens. (missing right curly?), ${JSON.stringify(a[0][1])}`);return oe(["begin",...n],null,r)},se=X("not",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.False(e))))),ce=X("boolean?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Boolean(e))))),ue=X("boolean=?",[{name:"boolean1"},{name:"boolean2"},{name:"booleans",type:"variadic"}],(({boolean1:e,boolean2:r,booleans:t})=>(z.Boolean(e),z.Boolean(r),z.Booleans(t),C.Boolean([r,...t].every((r=>r[1]===e[1])))))),me={not:se,booleanQ:ce,booleanEQ:ue},de=X("bytevector?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.ByteVector(e))))),pe=X("make-bytevector",[{name:"k"},{name:"byte",type:"optional"}],(({k:e,byte:r})=>(z.IntegerNumber(e),r&&z.IntegerNumber(r),C.ByteVector(Array(e[1]).fill(r?r[1]:0),!1)))),fe=X("bytevector",[{name:"bytes",type:"variadic"}],(({bytes:e})=>(z.IntegerNumbers(e),C.ByteVector(e.map((e=>e[1])),!1)))),be=X("bytevector-length",[{name:"bvec"}],(({bvec:e})=>(z.ByteVector(e),C.Number(e[1].length)))),ye=X("bytevector-u8-ref",[{name:"bvec"},{name:"k"}],(({bvec:e,k:r})=>{if(z.ByteVector(e),z.IntegerNumber(r),!(r[1]in e[1]))throw C.Error("out-of-range","Index is out of range.");return C.Number(e[1][r[1]])})),he=X("bytevector-u8-set!",[{name:"bvec"},{name:"k"},{name:"byte"}],(({bvec:e,k:r,byte:t})=>{if(z.ByteVector(e),z.IntegerNumber(r),z.IntegerNumber(t),!(r[1]in e[1]))throw C.Error("out-of-range","Index is out of range.");return e[1][r[1]]=t[1],["<undefined>"]})),ge=X("bytevector-copy",[{name:"bvec"},{name:"start",type:"optional"},{name:"end",type:"optional"}],(({bvec:e,start:r,end:t})=>{z.ByteVector(e);const n=e[1];if(0===n.length)return C.ByteVector([],!1);const a=$.Number(r)?r[1]:0,o=$.Number(t)?t[1]:n.length;if("number"!=typeof a||!Number.isInteger(a)||"number"!=typeof o||!Number.isInteger(o))throw C.Error("domain-error","Index must be integer.");return C.ByteVector(n.slice(a,o),!1)})),ve=X("bytevector-copy!",[{name:"to"},{name:"at"},{name:"from"},{name:"start",type:"optional"},{name:"end",type:"optional"}],(({to:e,at:r,from:t,start:n,end:a})=>{z.ByteVector(e),z.IntegerNumber(r),z.ByteVector(t);const o=$.Number(n)?n[1]:0,i=$.Number(a)?a[1]:t[1].length;if("number"!=typeof o||!Number.isInteger(o)||"number"!=typeof i||!Number.isInteger(i))throw C.Error("domain-error","Index must be integer.");if(!(r[1]in e[1]))throw C.Error("out-of-range","Index is out of range.");if(e[1].length-r[1]<i-o)throw C.Error("out-of-range","Index is out of range.");const l=t[1].slice(o,i);return e[1].splice(r[1],l.length,...l),["<undefined>"]})),Se=X("bytevector-append",[{name:"vecs",type:"variadic"}],(({vecs:e})=>(z.ByteVectors(e),C.ByteVector(e.map((e=>e[1])).flat(),!1)))),we=X("utf8->string",[{name:"bvec"},{name:"start",type:"optional"},{name:"end",type:"optional"}],(({bvec:e,start:r,end:t})=>{z.ByteVector(e);const n=e[1],a=$.Number(r)?r[1]:0,o=$.Number(t)?t[1]:n.length;if("number"!=typeof a||!Number.isInteger(a)||"number"!=typeof o||!Number.isInteger(o))throw C.Error("domain-error","Index must be integer.");const i=new Uint8Array(n.slice(a,o));return C.String((new TextDecoder).decode(i),!1)})),xe=X("string->utf8",[{name:"str"},{name:"start",type:"optional"},{name:"end",type:"optional"}],(({str:e,start:r,end:t})=>{z.String(e);const n=Array.from(e[1]),a=$.Number(r)?r[1]:0,o=$.Number(t)?t[1]:n.length;if("number"!=typeof a||!Number.isInteger(a)||"number"!=typeof o||!Number.isInteger(o))throw C.Error("domain-error","Index must be integer.");const i=(new TextEncoder).encode(n.slice(a,o).join(""));return C.ByteVector(Array.from(i),!1)})),je={bytevectorQ:de,makeBytevector:pe,bytevector:fe,bytevectorLength:be,bytevectorU8Ref:ye,bytevectorU8SetD:he,bytevectorCopy:ge,bytevectorCopyD:ve,bytevectorAppend:Se,utf8ToString:we,stringToUtf8:xe},Pe=X("char?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Character(e))))),Ee=X("char=?",[{name:"char1"},{name:"char2"},{name:"chars",type:"variadic"}],(({char1:e,char2:r,chars:t})=>(z.Character(e),z.Character(r),z.Characters(t),C.Boolean([r,...t].every((r=>r[1]===e[1])))))),Ne=X("char<?",[{name:"char1"},{name:"char2"},{name:"chars",type:"variadic"}],(({char1:e,char2:r,chars:t})=>{z.Character(e),z.Character(r),z.Characters(t);const n=[e,r,...t].map((e=>e[1]));return C.Boolean(n.every(((e,r)=>0===r||n[r-1]<e)))})),Ie=X("char>?",[{name:"char1"},{name:"char2"},{name:"chars",type:"variadic"}],(({char1:e,char2:r,chars:t})=>{z.Character(e),z.Character(r),z.Characters(t);const n=[e,r,...t].map((e=>e[1]));return C.Boolean(n.every(((e,r)=>0===r||n[r-1]>e)))})),Be=X("char<=?",[{name:"char1"},{name:"char2"},{name:"chars",type:"variadic"}],(({char1:e,char2:r,chars:t})=>{z.Character(e),z.Character(r),z.Characters(t);const n=[e,r,...t].map((e=>e[1]));return C.Boolean(n.every(((e,r)=>0===r||n[r-1]<=e)))})),Oe=X("char>=?",[{name:"char1"},{name:"char2"},{name:"chars",type:"variadic"}],(({char1:e,char2:r,chars:t})=>{z.Character(e),z.Character(r),z.Characters(t);const n=[e,r,...t].map((e=>e[1]));return C.Boolean(n.every(((e,r)=>0===r||n[r-1]>=e)))})),Ce=X("char->integer",[{name:"char"}],(({char:e})=>{z.Character(e);const r=e[1].codePointAt(0);if(void 0===r)throw C.Error("out-of-range","Can't convert character to codepoint.");return C.Number(r)})),Ae=X("integer->char",[{name:"n"}],(({n:e})=>(z.IntegerNumber(e),C.Character(String.fromCodePoint(e[1]))))),$e={charQ:Pe,charEQ:Ee,charLtQ:Ne,charGtQ:Ie,charLeQ:Be,charGeQ:Oe,charToInteger:Ce,integerToChar:Ae},Le=X("procedure?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Procedure(e)))),!0),ke=X("apply",[{name:"proc"},{name:"args",type:"variadic"}],(({proc:e,args:r},t,n)=>{let a;if(z.Procedure(e),z.Objects(r),V(t),V(n),0===r.length)a=[];else{const[e,t]=[r.slice(0,r.length-1),r[r.length-1]];z.List(t),a=[...e,...U(t)]}return A.Call(e,C.MultiValue(a))}),!0),ze=X("map",[{name:"proc"},{name:"list1"},{name:"lists",type:"variadic"}],(({proc:e,list1:r,lists:t})=>{z.Procedure(e),z.List(r),z.Lists(t);const n=[r,...t];return n.every((e=>$.Pair(e)))?A.Cons(A.Call(e,C.MultiValue(n.map((e=>e[1])))),A.CallBuiltIn("map",C.MultiValue([e,...n.map((e=>e[2]))]))):A.Quote(["<null>"])}),!0),Ve=X("string-map",[{name:"proc"},{name:"str1"},{name:"strs",type:"variadic"}],(({proc:e,str1:r,strs:t})=>{z.Procedure(e),z.String(r),z.Strings(t);const n=[Array.from(r[1]),...t.map((e=>Array.from(e[1])))];return n.every((e=>e.length>1))?A.CallBuiltIn("string-append",A.CallBuiltIn("string",A.Call(e,...n.map((e=>C.Character(e[0]))))),A.CallBuiltIn("string-map",e,...n.map((e=>C.String(e.slice(1).join(""),!1))))):n.every((e=>e.length>=1))?A.CallBuiltIn("string",A.Call(e,...n.map((e=>C.Character(e[0]))))):C.String("",!1)}),!0),Me=X("vector-map",[{name:"proc"},{name:"vector1"},{name:"vectors",type:"variadic"}],(({proc:e,vector1:r,vectors:t})=>{z.Procedure(e),z.Vector(r),z.Vectors(t);const n=[r,...t];return n.every((e=>e[1].length>1))?A.CallBuiltIn("vector-append",A.CallBuiltIn("vector",A.Call(e,C.MultiValue(n.map((e=>e[1][0]))))),A.CallBuiltIn("vector-map",e,...n.map((e=>C.Vector(e[1].slice(1),!1))))):n.every((e=>e[1].length>=1))?A.CallBuiltIn("vector",A.Call(e,C.MultiValue(n.map((e=>e[1][0]))))):C.Vector([],!1)}),!0),qe=X("for-each",[{name:"proc"},{name:"list1"},{name:"lists",type:"variadic"}],(({proc:e,list1:r,lists:t})=>{z.Procedure(e),z.List(r),z.Lists(t);const n=[r,...t];return n.every((e=>$.Pair(e)))?A.Begin(A.Call(e,C.MultiValue(n.map((e=>e[1])))),A.CallBuiltIn("for-each",C.MultiValue([e,...n.map((e=>e[2]))]))):["<undefined>"]}),!0),Te=X("string-for-each",[{name:"proc"},{name:"str1"},{name:"strs",type:"variadic"}],(({proc:e,str1:r,strs:t})=>{z.Procedure(e),z.String(r),z.Strings(t);const n=[Array.from(r[1]),...t.map((e=>Array.from(e[1])))];return n.every((e=>e.length>1))?A.Begin(A.Call(e,...n.map((e=>C.Character(e[0])))),A.CallBuiltIn("string-for-each",e,...n.map((e=>C.String(e.slice(1).join(""),!1))))):n.every((e=>e.length>=1))?A.Call(e,...n.map((e=>C.Character(e[0])))):["<undefined>"]}),!0),De=X("vector-for-each",[{name:"proc"},{name:"vector1"},{name:"vectors",type:"variadic"}],(({proc:e,vector1:r,vectors:t})=>{z.Procedure(e),z.Vector(r),z.Vectors(t);const n=[r,...t];return n.every((e=>e[1].length>1))?A.Begin(A.Call(e,C.MultiValue(n.map((e=>e[1][0])))),A.CallBuiltIn("vector-for-each",e,...n.map((e=>C.Vector(e[1].slice(1),!1))))):n.every((e=>e[1].length>=1))?A.Call(e,C.MultiValue(n.map((e=>e[1][0])))):A.Quote(["<null>"])}),!0),Re=X("call-with-current-continuation",[{name:"proc"}],(({proc:e},r,t)=>(z.Procedure(e),V(t),A.Call(e,C.Continuation(j(t))))),!0),Qe=Z("call/cc",Re),Ue=X("values",[{name:"objs",type:"variadic"}],(({objs:e})=>(z.Objects(e),1===e.length?e[0]:C.MultiValue(e)))),Fe=X("call-with-values",[{name:"producer"},{name:"consumer"}],(({producer:e,consumer:r},t,n)=>{z.Procedure(e),z.Procedure(r),V(n);const a=B(n,C.List(r),{want:"args",oper:r});return I(a,C.List(e))})),Je=X("dynamic-wind",[{name:"before"},{name:"thunk"},{name:"after"}],(({before:e,thunk:r,after:t},n,a)=>{z.Procedure(e),z.Procedure(r),z.Procedure(t),V(a);const o=C.Continuation(j(a));return I(a,A.Begin(A.Call(e),A.Call(o,A.Call(r))),{before:e,after:t})})),_e={procedureQ:Le,apply:ke,map:ze,stringMap:Ve,vectorMap:Me,forEach:qe,stringForEach:Te,vectorForEach:De,callWithCurrentContinuation:Re,callCC:Qe,values:Ue,callWithValues:Fe,dynamicWind:Je},Xe=X("eqv?",[{name:"obj1"},{name:"obj2"}],(({obj1:e,obj2:r})=>{z.Object(e),z.Object(r);const t=e=>$.String(e)||$.ByteVector(e)||$.Vector(e)?e.slice(0,e.length-1):$.Pair(e)?e.slice(0,3):$.Symbol(e)?e.slice(0,2):e;return C.Boolean(e===r||K(t(e),t(r)))})),Ze=Z("eq?",Xe),Ke=X("equal?",[{name:"obj1"},{name:"obj2"}],(({obj1:e,obj2:r})=>{z.Object(e),z.Object(r);const t=(e,r)=>e===r||($.Pair(e)&&$.Pair(r)?t(e[1],r[1])&&t(e[2],r[2]):$.Vector(e)&&$.Vector(r)?e[1]===r[1]||e[1].length===r[1].length&&e[1].every(((e,n)=>t(e,r[1][n]))):$.ByteVector(e)&&$.ByteVector(r)?K(e[1],r[1]):Xe.body({obj1:e,obj2:r})[1]);return C.Boolean(t(e,r))})),We={eqvQ:Xe,eqQ:Ze,equalQ:Ke},Ge=X("with-exception-handler",[{name:"handler"},{name:"thunk"}],(({handler:e,thunk:r},t,n)=>(z.Procedure(e),z.Procedure(r),V(n),B(n,A.Call(r),{handler:C.HandlerStack(e,E(n).handler)})))),He=X("raise",[{name:"obj"}],(({obj:e},r,t)=>{throw z.Object(e),V(t),C.Exception(t,e,!1)})),Ye=X("raise-continuable",[{name:"obj"}],(({obj:e},r,t)=>{throw z.Object(e),V(t),C.Exception(t,e,!0)})),er=X("error",[{name:"message"},{name:"objs",type:"variadic"}],(({message:e,objs:r},t,n)=>{throw z.String(e),z.Objects(r),V(n),C.Exception(n,C.Error("error",e[1],r),!0)})),rr=X("error-object?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Error(e))))),tr=X("error-object-message",[{name:"err"}],(({err:e})=>{var r;return z.Error(e),C.String(null!=(r=e[2])?r:e[1],!1)})),nr=X("error-object-irritants",[{name:"err"}],(({err:e})=>(z.Error(e),C.List(...e[3])))),ar=X("read-error?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Error(e)&&"read-error"===e[1])))),or=X("file-error?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Error(e)&&"file-error"===e[1])))),ir={withExceptionHandler:Ge,raise:He,raiseContinuable:Ye,error:er,errorObjectQ:rr,errorObjectMessage:tr,errorObjectIrritants:nr,readErrorQ:ar,fileErrorQ:or},lr=X("suspend",[{name:"obj",type:"optional"}],(({obj:e},r,t)=>{throw V(t),e&&z.Object(e),C.Suspend(C.Continuation(j(t)),null!=e?e:C.Undefined())})),sr=X("read-file",[{name:"filename"},{name:"cli",type:"optional"}],(({filename:e,cli:r},t)=>{if(V(t),z.String(e),r&&z.Boolean(r),!(null==t?void 0:t.fs))throw C.Error("program-error",'No interpreter object or No Node.js "fs" object set on Interpreter.');let n,a;try{n=t.fs.readFileSync(e[1]).toString()}catch{throw C.Error("read-error",`Can't read file from ${e[1]}.`)}try{a=le(r&&r[1]?"#!fold-case "+n:n,{filename:e[1]})}catch(o){throw o instanceof Error?C.Error("read-error",o.message):C.Error("read-error","Error occured while reading.")}return a}),!1,!0),cr={suspend:lr,readFile:sr},ur=X("features",[],(()=>C.List(C.Symbol("r7rs"),C.Symbol(u),C.Symbol(u+"-0.6.0")))),mr={features:ur},dr=X("quote",[{name:"value",evaluate:!1}],(({value:e})=>(z.Object(e),e))),pr=X("lambda",[{name:"formals",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({formals:e,body:r},t,n)=>{z.Object(e),z.Objects(r),V(n);const[a,o]=W(e);return C.Procedure("lambda",o?[...a,o]:a,A.BeginIfMultiple(...r),!1,E(n).env)})),fr=X("if",[{name:"test"},{name:"consequent",evaluate:!1},{name:"alternate",type:"optional",evaluate:!1}],(({test:e,consequent:r,alternate:t})=>(z.Object(e),z.Object(r),$.False(e)?t?(z.Object(t),t):["<undefined>"]:r)),!0),br=X("set!",[{name:"variable",evaluate:!1},{name:"expr"}],(({variable:e,expr:r},t,n)=>{if(V(t),V(n),z.Symbol(e),z.Object(r),$.Undefined(r))throw C.Error("undefined-variable",`Attempt to set undefined value to a variable "${e[1]}"`);if(!t.setStatic(E(n).env.static,e,r))throw C.Error("unbound-variable",`Attempt to set value to an unbound variable "${e[1]}"`);return["<undefined>"]})),yr=X("include",[{name:"str1"},{name:"strs",type:"variadic"}],(({str1:e,strs:r},t,n)=>{V(t),V(n),z.String(e),z.Strings(r);const a=[e,...r].map((e=>sr.body({filename:e},t)));return 1===a.length?a[0]:A.Begin(...a)}),!0),hr=X("include-cli",[{name:"str1"},{name:"strs",type:"variadic"}],(({str1:e,strs:r},t,n)=>{V(t),V(n),z.String(e),z.Strings(r);const a=[e,...r].map((e=>sr.body({filename:e,cli:C.Boolean(!0)},t)));return 1===a.length?a[0]:A.Begin(...a)}),!0),gr=X("cond",[{name:"clause",evaluate:!1},{name:"clauses",type:"variadic",evaluate:!1}],(({clause:e,clauses:r})=>{z.Pair(e),z.Pairs(r);const t=0===r.length?["<undefined>"]:A.Cond(r[0],...r.splice(1)),[n,a,...o]=U(e);if($.Symbol(n)&&"else"===n[1])return A.BeginIfMultiple(a,...o);if(a){if($.Symbol(a)&&"=>"===a[1]){if(1!==o.length)throw C.Error("syntax-error","Illegal cond syntax (test => expression).");const e=C.Symbol(_());return A.Let([[e,n]],A.If(e,A.Call(o[0],e),t))}return A.If(n,A.BeginIfMultiple(a,...o),t)}return A.Or(n,t)}),!0),vr=X("case",[{name:"key"},{name:"clauses",type:"variadic",evaluate:!1}],(({key:e,clauses:r})=>{z.Object(e),z.Pairs(r);const t=r.find(((t,n)=>{if($.Symbol(t[1])&&"else"===t[1][1]){if(n!==r.length-1)throw C.Error("syntax-error","Illegal case syntax (else placement).");return!0}return z.Pair(t[1]),U(t[1]).some((r=>Xe.body({obj1:r,obj2:e})[1]))}));if(t){const[,r,...n]=U(t);if(r){if($.Symbol(r)&&"=>"===r[1]){if(1!==n.length)throw C.Error("syntax-error","Illegal cond syntax (test => expression).");return A.Call(n[0],C.MultiValue([e]))}return A.BeginIfMultiple(r,...n)}throw C.Error("syntax-error","Illegal cond syntax (short clause).")}return["<undefined>"]}),!0),Sr=X("and",[{name:"first",type:"optional"},{name:"rest",type:"variadic",evaluate:!1}],(({first:e,rest:r})=>e?(z.Object(e),z.Objects(r),0===r.length||$.False(e)?A.Quote(e):A.And(...r)):C.Boolean(!0)),!0),wr=X("or",[{name:"first",type:"optional"},{name:"rest",type:"variadic",evaluate:!1}],(({first:e,rest:r})=>e?(z.Object(e),z.Objects(r),0!==r.length&&$.False(e)?A.Or(...r):A.Quote(e)):C.Boolean(!1)),!0),xr=X("when",[{name:"test"},{name:"expr",evaluate:!1},{name:"exprs",type:"variadic",evaluate:!1}],(({test:e,expr:r,exprs:t})=>(z.Object(e),z.Object(r),z.Objects(t),$.False(e)?["<undefined>"]:A.BeginIfMultiple(r,...t))),!0),jr=X("unless",[{name:"test"},{name:"expr",evaluate:!1},{name:"exprs",type:"variadic",evaluate:!1}],(({test:e,expr:r,exprs:t})=>(z.Object(e),z.Object(r),z.Objects(t),$.False(e)?A.BeginIfMultiple(r,...t):["<undefined>"])),!0),Pr=X("cond-expand",[{name:"clause1",evaluate:!1},{name:"clauses",type:"variadic",evaluate:!1}],(({clause1:e,clauses:r},t,n)=>{z.Pair(e),z.Pairs(r),V(t),V(n);const a=[e,...r],o=U(ur.body()),i=e=>{if($.Symbol(e))return o.some((r=>$.Symbol(r)&&r[1]===e[1]));if($.Pair(e)){const[,r,a]=e;if($.Symbol(r)&&$.List(a)){if("and"===r[1])return U(a).every((e=>i(e)));if("or"===r[1])return U(a).some((e=>i(e)));if("not"===r[1]){if($.Pair(a))return!i(a[1])}else if("library"===r[1]&&$.Pair(a)){const e=h(a[1]);if(t.getBuiltInLibrary(e))return!0;{const r=t.getStatic(E(n).env.static,C.Symbol(e));return $.Library(r)}}}}return!1},l=a.find((e=>i(e[1])));return l?C.Pair(C.Procedure("built-in","begin"),l[2]):C.Undefined()}),!0),Er=X("let",[{name:"args",type:"variadic",evaluate:!1}],(({args:e},r,t)=>{z.Objects(e);const[n,a,...o]=$.Symbol(e[0])?e:[null,...e];z.List(a),z.Objects(o),V(t);const i=U(a).map((e=>{z.Pair(e),z.Symbol(e[1]),z.Pair(e[2]);const[,r,[,t]]=e;return[r,t]})),l=i.map((([e])=>e)),s=i.map((([,e])=>e)),c=A.Lambda(l,null,...o);return n?(z.Symbol(n),A.CallThunk(A.Define(n,c),A.Call(n,...s))):A.Call(c,...s)}),!0),Nr=X("let*",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>{if(z.List(e),z.Objects(r),V(n),$.Pair(e)){z.Pair(e[1]),z.Pair(e[1][2]);const[,[,t,[,n]],a]=e;return z.Symbol(t),A.Call(A.Lambda([t],null,A.CallBuiltIn("let*",a,...r)),n)}return A.BeginIfMultiple(...r)}),!0),Ir=X("letrec",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>{z.List(e),z.Objects(r),V(t),V(n);const a=U(e).map((e=>{z.Pair(e),z.Symbol(e[1]),z.Pair(e[2]);const[,r,[,t]]=e;return[r,t]})),{static:o,dynamic:i}=E(n).env,l=O(o);return a.forEach((([e])=>t.defineStatic(l,e,["<undefined>"]))),A.Call(C.Procedure("lambda",[],A.Begin(A.DefineValues(a.map((([e])=>e)),A.Values(...a.map((([,e])=>e)))),...r),!1,{static:l,dynamic:i}))}),!0),Br=X("letrec*",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>{z.List(e),z.Objects(r),V(t),V(n);const a=U(e).map((e=>{z.Pair(e),z.Symbol(e[1]),z.Pair(e[2]);const[,r,[,t]]=e;return[r,t]})),{static:o,dynamic:i}=E(n).env,l=O(o);return a.forEach((([e])=>t.defineStatic(l,e,["<undefined>"]))),A.Call(C.Procedure("lambda",[],A.Begin(...a.map((([e,r])=>A.Set(e,r))),...r),!1,{static:l,dynamic:i}))}),!0),Or=X("let-values",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>(z.List(e),z.Objects(r),V(n),A.CallThunk(...U(e).map((e=>{z.Pair(e),z.Pair(e[2]);const[,r,[,t]]=e,a=C.Procedure("lambda",[],t,!1,E(n).env);return A.CallBuiltIn("define-values",r,A.Call(a))})),...r))),!0),Cr=X("let*-values",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>{if(z.List(e),z.Objects(r),V(n),$.Pair(e)){z.Pair(e[1]),z.Pair(e[1][2]);const[,[,t,[,n]],a]=e;return A.CallThunk(A.CallBuiltIn("define-values",t,n),A.CallBuiltIn("let*-values",a,...r))}return A.BeginIfMultiple(...r)}),!0),Ar=X("begin",[{name:"exprs",type:"variadic",evaluate:!0},{name:"last",type:"tail",evaluate:!1}],(({exprs:e,last:r},t,n)=>(((e,r)=>{if(!(e instanceof Array))throw C.Error("program-error",null!=r?r:"An array is expected.")})(e),z.Object(r),V(n),0===E(n).depth?I(n,r):r)),!0),$r=X("do",[{name:"specs",evaluate:!1},{name:"clause",evaluate:!1},{name:"commands",type:"variadic",evaluate:!1}],(({specs:e,clause:r,commands:t})=>{z.List(e),z.List(r),z.Objects(t);const n=U(e).map((e=>{z.Pair(e),z.Pair(e[2]),z.Symbol(e[1]);const[,r,[,t,n]]=e;return[r,t,$.Pair(n)?n[1]:null]})),[,a,o]=r;return z.Object(a),z.List(o),A.Let(n.map((([e,r])=>[e,r])),A.If(a,$.Null(o)?C.Undefined():A.Begin(...U(o)),A.Begin(...t,A.CallBuiltIn("do",C.List(...n.map((([e,,r])=>C.List(e,null!=r?r:e,null!=r?r:e)))),r,...t))))}),!0),Lr=X("make-parameter",[{name:"init"},{name:"converter",type:"optional"}],(({init:e,converter:r},t,n)=>{z.Object(e),V(t),V(n);let a=_();for(;a in E(n).env.dynamic[1];)a=_();return r&&z.Procedure(r),t.defineDynamic(E(n).env.dynamic,a,e),C.Parameter(a,null!=r?r:null)})),kr=X("parameterize",[{name:"assocs",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({assocs:e,body:r},t,n)=>{z.Pair(e),z.Pairs(r),V(t),V(n);const{env:a}=E(n),o=U(e).map((e=>{z.Pair(e),z.Pair(e[2]);const[,r,[,t]]=e;return[r,t]})),i={static:a.static,dynamic:C.DynamicNS({},a.dynamic)},l=A.BeginIfMultiple(...o.map((([e,r])=>A.CallBuiltIn("define-parameter",e,r))),...r);return B(n,l,{env:i})})),zr=X("define-parameter",[{name:"param"},{name:"value",evaluate:!1}],(({param:e,value:r},t,n)=>{z.Parameter(e),z.Object(r),V(t),V(n);const[,,a]=e;return A.CallBuiltIn("define-parameter-1",e,a?A.Call(a,r):r)}),!0,!0),Vr=X("define-parameter-1",[{name:"param"},{name:"value"}],(({param:e,value:r},t,n)=>{var a;if(z.Parameter(e),z.Object(r),V(t),V(n),!$.Undefined(null!=(a=x(E(n).env.dynamic)[e[1]])?a:["<undefined>"]))throw C.Error("redefine-variable",null);return t.defineDynamic(E(n).env.dynamic,e[1],r),["<undefined>"]}),!1,!0),Mr=X("guard",[{name:"arg1",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({arg1:e,body:r},t,n)=>{z.Pair(e),z.Objects(r),z.Symbol(e[1]),z.Pair(e[2]),V(n);const[,a,o]=e,i=C.Continuation(j(n)),l=C.Procedure("lambda",[{name:a[1]}],A.Call(i,A.CallBuiltIn("cond",...U(o),C.List(C.Symbol("else"),A.RaiseContinuable(a)))),!1,E(n).env);return A.CallBuiltIn("with-exception-handler",l,A.Lambda([],null,...r))}),!0),qr=X("quasiquote",[{name:"template",evaluate:!1}],(({template:e})=>{z.Object(e);const r=[],t=[],n=(e,a)=>{if($.Pair(e)){const[,o,i]=e;if($.Symbol(o)&&"quasiquote"===o[1])return C.Pair(o,n(i,a+1));if($.Symbol(o)&&"unquote"===o[1]||"unquote-splicing"===o[1]){if(0!==a)return C.Pair(o,n(i,a-1));{const e=C.Symbol("unquote-splicing"===o[1]?"@"+_():_());return z.Pair(i),r.push(e),t.push(i[1]),e}}return C.Pair(n(o,a),n(i,a))}return $.Vector(e)?C.Vector(e[1].map((e=>n(e,a))),!1):e},a=n(e,0);return A.CallBuiltIn("quasiquote-1",a,C.List(...r),...t)}),!0),Tr=X("quasiquote-1",[{name:"template",evaluate:!1},{name:"marks",evaluate:!1},{name:"exprs",type:"variadic"}],(({template:e,marks:r,exprs:t})=>{z.Object(e),z.List(r),z.Objects(t);const n=U(r);z.Symbols(n);const a=new Map;if(n.length!==t.length)throw C.Error("arity-error","quasiquote-1: marks and exprs unmatch.");n.forEach(((e,r)=>a.set(e[1],t[r])));const o=e=>{if($.Pair(e)){const[,r,t]=e;if($.Symbol(r)&&"@"===r[1][0]&&a.has(r[1])){const e=a.get(r[1]);if($.List(e))return $.Null(e)?o(t):J(U(e),o(t));throw C.Error("error","unquote-splicing evaluated as non-list object.")}return C.Pair(o(r),o(t))}return $.Vector(e)?C.Vector(e[1].map((e=>{if($.Symbol(e)&&"@"===e[1][0]&&a.has(e[1])){const r=a.get(e[1]);if($.List(r))return $.Null(r)?[]:U(r);throw C.Error("error","unquote-splicing evaluated as non-list object.")}return[o(e)]})).flat(),!1):$.Symbol(e)&&a.has(e[1])&&"@"!==e[1][0]?a.get(e[1]):e};return o(e)}),!1,!0),Dr=X("let-syntax",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>{z.List(e,"aa"),z.Objects(r),V(n);const a=U(e).map((e=>{z.Pair(e),z.Pair(e[2]),z.Symbol(e[1]);const[,r,[,t]]=e;return[r,C.Procedure("lambda",[],t,!1,E(n).env)]}));return A.CallThunk(...a.map((([e,r])=>A.CallBuiltIn("define-syntax",e,A.Call(r)))),...r)}),!0),Rr=X("letrec-syntax",[{name:"bindings",evaluate:!1},{name:"body",type:"variadic",evaluate:!1}],(({bindings:e,body:r},t,n)=>{z.List(e),z.Objects(r),V(t),V(n);const a=U(e).map((e=>{z.Pair(e),z.Pair(e[2]),z.Symbol(e[1]);const[,r,[,t]]=e;return[r,t]})),{static:o,dynamic:i}=E(n).env,l=O(o);return a.forEach((([e])=>t.defineStatic(l,e,["<undefined>"]))),A.Call(C.Procedure("lambda",[],A.Begin(...a.map((([e,r])=>A.CallBuiltIn("define-syntax",e,r))),...r),!1,{static:l,dynamic:i}))}),!0),Qr=(e,r,t=!0)=>{var n;const[a,o]=F(e),i=a.findIndex((e=>$.Symbol(e)&&e[1]===r)),l=t?i<0?a.slice(1):a.slice(1,i-1):i<0?a:a.slice(0,i-1),s=i<0?[]:a.slice(i+1),c=i<0?null:null!=(n=a[i-1])?n:null;return["<syntax-rule-pattern>",l.map((e=>$.Pair(e)?Qr(e,r,!1):e)),c?$.Pair(c)?Qr(c,r,!1):c:null,s.map((e=>$.Pair(e)?Qr(e,r,!1):e)),$.Null(o)?null:o]},Ur=X("syntax-rules",[{name:"arg1",evaluate:!1},{name:"arg2",evaluate:!1},{name:"args",type:"variadic",evaluate:!1}],(({arg1:e,arg2:r,args:t},n,a)=>{z.Object(e),z.Object(r),z.Objects(t),V(n),V(a);const[o,i,l]=$.Symbol(e)?[e[1],r,t]:["...",e,[r,...t]];z.List(i);const s=U(i).map((e=>(z.Symbol(e),e[1]))),c=(e,r=new Map)=>{var t;if($.Pair(e))return C.Pair(c(e[1],r),c(e[2],r));if($.Symbol(e)){if(n.getStatic(E(a).env.static,e))return C.Symbol(e[1],E(a).env.static,null!=(t=e[3])?t:null);if(s.includes(e[1])||o===e[1]||"_"===e[1])return e;if(r.has(e[1]))return r.get(e[1]);{const t=C.Symbol(e[1],null,_());return r.set(e[1],t),t}}return e};z.Pairs(l);const u=[];for(const m of l){const e=c(m);z.Pair(e),z.Pair(e[2]);const[,r,[,t]]=e;z.Pair(r);const[n,a]=F(r);if(!$.Null(a)&&n.some((e=>$.Symbol(e)&&e[1]===o)))throw C.Error("syntax-error","The root of a syntax-rules pattern with ellipsis must be a proper list.");u.push([Qr(r,o),t])}return C.SyntaxRules(o,s,u)})),Fr=(e,r)=>{if($.SyntaxRulePattern(e)){const[,t,n,a,o]=e;return[...t,...n?[n]:[],...a,...o?[o]:[]].map((e=>Fr(e,r))).flat()}return $.Symbol(e)&&!r.includes(e[1])?"_"===e[1]?[]:[e[1]]:[]},Jr=(e,r,t,n,a,o)=>{if($.SyntaxRulePattern(e)){if(!$.List(r))return null;const[,i,l,s,c]=e;if($.Null(r))return 0!==i.length||l||0!==s.length||c?null:new Map;const[u,m]=F(r);if(l||c){if(u.length<i.length+s.length)return null}else if(u.length!==i.length+s.length)return null;let d;if(l){const e=u.length-i.length-s.length;d=[...i,...Array(e).fill(l),...s],c&&(d.push(c),u.push(m))}else d=[...i],c&&(d.push(c),u.push(J(u.slice(i.length),m)));const p=new Map;l&&Fr(l,o).forEach((e=>p.set(e,[])));for(let e=0;e<d.length;e++){const[r,i]=[d[e],u[e]],s=Jr(r,i,t,n,a,o);if(!s)return null;if(r===l)for(const[e,t]of s.entries()){const r=p.get(e);if(!r||$.Object(r))throw C.Error("syntax-error",`Internal error: illegal behavior of syntax-rules. No array prepared for variadic variable "${e}".`);$.Object(t)?p.set(e,[...r,t]):p.set(e,[...r,...t])}else for(const[e,t]of s.entries()){if(p.has(e))throw C.Error("syntax-error","The same pattern variable appeared more than once in a pattern.");p.set(e,t)}}return p}if($.Symbol(e)&&o.includes(e[1])){if(!$.Symbol(r))return null;const o=t.getStatic(a,e),i=t.getStatic(n,e);return e[1]===r[1]&&o===i?new Map:null}return $.Symbol(e)?"_"===e[1]?new Map:new Map([[e[1],r]]):Ke.body({obj1:e,obj2:r})[1]?new Map:null},_r=X("use-syntax-rules",[{name:"spec"},{name:"args"}],(({spec:e,args:r},t,n)=>{z.SyntaxRules(e),z.List(r),V(t),V(n);const[,a,o,i]=e,l=E(j(n)).env.static,s=E(n).env.static;let c,u;{let e,n;for(const a of i)if(e=Jr(a[0],r,t,l,s,o)){n=a[1];break}if(!e||!n)throw C.Error("syntax-error","No rules match arguments.");[c,u]=[e,n]}const m=e=>{if($.Pair(e)){const[,r,t]=e;if($.Symbol(r)&&c.has(r[1])&&$.Symbol(t[1])&&t[1][1]===a){const e=c.get(r[1]);if(!e||$.Object(e))throw C.Error("syntax-error",`Pattern variable "${r[1]} is not variadic." `);return J(e,m(t[2]))}return $.Pair(r)&&$.Symbol(r[1])&&r[1][1]===a&&$.Pair(r[2])?C.Pair(m(r[2][1]),m(t)):C.Pair(m(r),m(t))}if($.Symbol(e)&&c.has(e[1])){const r=c.get(e[1]);if(!$.Object(r))throw C.Error("syntax-error",`Pattern variable "${e[1]}" must be variadic. (add "${a}" after the symbol)" `);return r}return e};return m(u)}),!1,!0),Xr=X("syntax-error",[{name:"message"},{name:"args",type:"variadic"}],(({message:e,args:r})=>{throw z.String(e),z.Objects(r),C.Error("syntax-error",e[1],r)})),Zr={quote:dr,lambda:pr,If:fr,setD:br,include:yr,includeCli:hr,cond:gr,Case:vr,and:Sr,or:wr,when:xr,unless:jr,condExpand:Pr,Let:Er,LetStar:Nr,letrecStar:Br,letrec:Ir,letValues:Or,letStarValues:Cr,begin:Ar,Do:$r,makeParameter:Lr,parameterize:kr,defineParameter:zr,defineParameter1:Vr,guard:Mr,quasiquote:qr,quasiquote1:Tr,letSyntax:Dr,letrecSyntax:Rr,syntaxRules:Ur,applySyntaxRules:_r,syntaxError:Xr},Kr=X("pair?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Pair(e))))),Wr=X("cons",[{name:"obj1"},{name:"obj2"}],(({obj1:e,obj2:r})=>(z.Object(e),z.Object(r),C.Pair(e,r)))),Gr=X("car",[{name:"pair"}],(({pair:e})=>(z.Pair(e),e[1]))),Hr=X("cdr",[{name:"pair"}],(({pair:e})=>(z.Pair(e),e[2]))),Yr=X("set-car!",[{name:"pair"},{name:"obj"}],(({pair:e,obj:r})=>{if(z.Pair(e),z.Object(r),e[3])throw C.Error("immutable-object","Specified list is immutable");return e[1]=r,e})),et=X("set-cdr!",[{name:"pair"},{name:"obj"}],(({pair:e,obj:r})=>{if(z.Pair(e),z.Object(r),e[3])throw C.Error("immutable-object","Specified list is immutable");return e[2]=r,e})),rt=X("caar",[{name:"pair"}],(({pair:e})=>(z.Pair(e),z.Pair(e[1]),e[1][1]))),tt=X("cadr",[{name:"pair"}],(({pair:e})=>(z.Pair(e),z.Pair(e[2]),e[2][1]))),nt=X("cdar",[{name:"pair"}],(({pair:e})=>(z.Pair(e),z.Pair(e[1]),e[1][2]))),at=X("cddr",[{name:"pair"}],(({pair:e})=>(z.Pair(e),z.Pair(e[2]),e[2][2]))),ot=X("null?",[{name:"obj"}],(({obj:e})=>(z.Object(e),C.Boolean($.Null(e))))),it=X("list?",[{name:"obj"}],(({obj:e})=>{if(z.Object(e),!$.List(e))return C.Boolean(!1);if($.Null(e))return C.Boolean(!0);try{const[,r]=F(e);return C.Boolean($.Null(r))}catch(r){return C.Boolean(!1)}})),lt=X("make-list",[{name:"k"},{name:"fill",type:"optional"}],(({k:e,fill:r})=>(z.IntegerNumber(e),r?(z.Object(r),C.List(...Array.from({length:e[1]},(()=>r)))):C.List(...Array.from({length:e[1]},(()=>["<undefined>"])))))),st=X("list",[{name:"objs",type:"variadic"}],(({objs:e})=>(z.Objects(e),C.List(...e)))),ct=X("length",[{name:"list"}],(({list:e})=>(z.List(e),C.Number(U(e).length)))),ut=X("append",[{name:"args",type:"variadic"}],(({args:e})=>{if(z.Objects(e),0===e.length)return["<null>"];if(1===e.length)return e[0];{const[r,t]=[e.slice(0,e.length-1),e[e.length-1]];return z.Lists(r),J(r.map((e=>U(e))).flat(),t)}})),mt=X("reverse",[{name:"list"}],(({list:e})=>(z.List(e),C.List(...U(e).reverse())))),dt=X("list-tail",[{name:"list"},{name:"k"}],(({list