-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtau-prolog.min.js
8 lines (8 loc) · 141 KB
/
tau-prolog.min.js
1
2
3
4
5
6
7
8
/**
* Minified by jsDelivr using Terser v3.14.1.
* Original file: /npm/[email protected]/modules/core.js
*
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
*/
!function(){var version={major:0,minor:2,patch:81,status:"beta"},indexOf;tau_file_system={files:{},open:function(e,r,t){var i=tau_file_system.files[e];if(!i){if("read"===t)return null;i={path:e,text:"",type:r,get:function(e,r){return r===this.text.length?"end_of_file":r>this.text.length?"end_of_file":this.text.substring(r,r+e)},put:function(e,r){return"end_of_file"===r?(this.text+=e,!0):"past_end_of_file"===r?null:(this.text=this.text.substring(0,r)+e+this.text.substring(r+e.length),!0)},get_byte:function(e){if("end_of_stream"===e)return-1;var r=Math.floor(e/2);if(this.text.length<=r)return-1;var t=codePointAt(this.text[Math.floor(e/2)],0);return e%2==0?255&t:t/256>>>0},put_byte:function(e,r){var t="end_of_stream"===r?this.text.length:Math.floor(r/2);if(this.text.length<t)return null;var i=this.text.length===t?-1:codePointAt(this.text[Math.floor(r/2)],0);return i=r%2==0?(255&(i=i/256>>>0))<<8|255&e:(255&e)<<8|255&(i&=255),this.text.length===t?this.text+=fromCodePoint(i):this.text=this.text.substring(0,t)+fromCodePoint(i)+this.text.substring(t+1),!0},flush:function(){return!0},close:function(){return!!tau_file_system.files[this.path]||null}},tau_file_system.files[e]=i}return"write"===t&&(i.text=""),i}},tau_user_input={buffer:"",get:function(e,r){for(var t;tau_user_input.buffer.length<e;)(t=window.prompt())&&(tau_user_input.buffer+=t);return t=tau_user_input.buffer.substr(0,e),tau_user_input.buffer=tau_user_input.buffer.substr(e),t}},tau_user_output={put:function(e,r){return console.log(e),!0},flush:function(){return!0}},nodejs_file_system={open:function(e,r,t){var i=require("fs"),n=i.openSync(e,t[0]);return"read"!==t||i.existsSync(e)?{get:function(e,r){var t=new Buffer(e);return i.readSync(n,t,0,e,r),t.toString()},put:function(e,r){var t=Buffer.from(e);if("end_of_file"===r)i.writeSync(n,t);else{if("past_end_of_file"===r)return null;i.writeSync(n,t,0,t.length,r)}return!0},get_byte:function(e){return null},put_byte:function(e,r){return null},flush:function(){return!0},close:function(){return i.closeSync(n),!0}}:null}},nodejs_user_input={buffer:"",get:function(e,r){for(var t,i=require("readline-sync");nodejs_user_input.buffer.length<e;)nodejs_user_input.buffer+=i.question();return t=nodejs_user_input.buffer.substr(0,e),nodejs_user_input.buffer=nodejs_user_input.buffer.substr(e),t}},nodejs_user_output={put:function(e,r){return process.stdout.write(e),!0},flush:function(){return!0}},indexOf=Array.prototype.indexOf?function(e,r){return e.indexOf(r)}:function(e,r){for(var t=e.length,i=0;i<t;i++)if(r===e[i])return i;return-1};var reduce=function(e,r){if(0!==e.length){for(var t=e[0],i=e.length,n=1;n<i;n++)t=r(t,e[n]);return t}},map,filter,codePointAt,fromCodePoint,stringLength;map=Array.prototype.map?function(e,r){return e.map(r)}:function(e,r){for(var t=[],i=e.length,n=0;n<i;n++)t.push(r(e[n]));return t},filter=Array.prototype.filter?function(e,r){return e.filter(r)}:function(e,r){for(var t=[],i=e.length,n=0;n<i;n++)r(e[n])&&t.push(e[n]);return t},codePointAt=String.prototype.codePointAt?function(e,r){return e.codePointAt(r)}:function(e,r){return e.charCodeAt(r)},fromCodePoint=String.fromCodePoint?function(){return String.fromCodePoint.apply(null,arguments)}:function(){return String.fromCharCode.apply(null,arguments)};var regexAstralSymbols=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;stringLength=Array.from?function(e){return Array.from(e).length}:function(e){return e.replace(regexAstralSymbols,"_").length};var ERROR=0,SUCCESS=1,regex_escape=/(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v)|\\x([0-9a-fA-F]+)\\|\\([0-7]+)\\|(\\\\)|(\\')|('')|(\\")|(\\`)|(\\.)|(.)/g,escape_map={"\\a":7,"\\b":8,"\\f":12,"\\n":10,"\\r":13,"\\t":9,"\\v":11};function escape(e){var r=[],t=!1;return e.replace(regex_escape,function(e,i,n,a,o,s,l,p,u,_,c,f,d,m,w,g,y){switch(!0){case void 0!==u:return r.push(parseInt(u,16)),"";case void 0!==_:return r.push(parseInt(_,8)),"";case void 0!==c:case void 0!==f:case void 0!==d:case void 0!==m:case void 0!==w:return r.push(codePointAt(e.substr(1),0)),"";case void 0!==y:return r.push(codePointAt(y,0)),"";case void 0!==g:t=!0;default:return r.push(escape_map[e]),""}}),t?null:r}function escapeAtom(e,r){var t="";if("\\"===e)return null;if(e.length<2)return e;try{e=(e=e.replace(/\\([0-7]+)\\/g,function(e,r){return fromCodePoint(parseInt(r,8))})).replace(/\\x([0-9a-fA-F]+)\\/g,function(e,r){return fromCodePoint(parseInt(r,16))})}catch(e){return null}for(var i=0;i<e.length;i++){var n=e.charAt(i),a=e.charAt(i+1);if(n===r&&a===r)i++,t+=r;else if("\\"===n){if(-1===["a","b","f","n","r","t","v","'",'"',"\\","a","\b","\f","\n","\r","\t","\v"].indexOf(a))return null;switch(i+=1,a){case"a":t+="a";break;case"b":t+="\b";break;case"f":t+="\f";break;case"n":t+="\n";break;case"r":t+="\r";break;case"t":t+="\t";break;case"v":t+="\v";break;case"'":t+="'";break;case'"':t+='"';break;case"\\":t+="\\"}}else t+=n}return t}function redoEscape(e){for(var r="",t=0;t<e.length;t++)switch(e.charAt(t)){case"'":r+="\\'";break;case"\\":r+="\\\\";break;case"\b":r+="\\b";break;case"\f":r+="\\f";break;case"\n":r+="\\n";break;case"\r":r+="\\r";break;case"\t":r+="\\t";break;case"\v":r+="\\v";break;default:r+=e.charAt(t)}return r}function convertNum(e){var r=e.substr(2);switch(e.substr(0,2).toLowerCase()){case"0x":return parseInt(r,16);case"0b":return parseInt(r,2);case"0o":return parseInt(r,8);case"0'":return escape(r)[0];default:return parseFloat(e)}}var rules={whitespace:/^\s*(?:(?:%.*)|(?:\/\*(?:\n|\r|.)*?\*\/)|(?:\s+))\s*/,variable:/^(?:[A-Z_][a-zA-Z0-9_]*)/,atom:/^(\!|,|;|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+|'(?:(?:'')|(?:\\')|[^'])*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function replace(e,r){return"on"===e.get_flag("char_conversion").id?r.replace(/./g,function(r){return e.get_char_conversion(r)}):r}function Tokenizer(e){this.thread=e,this.text="",this.tokens=[]}function parseExpr(e,r,t,i,n){if(!r[t])return{type:ERROR,value:pl.error.syntax(r[t-1],"expression expected",!0)};if("0"===i){switch((u=r[t]).name){case"number":return{type:SUCCESS,len:t+1,value:new pl.type.Num(u.value,u.float)};case"variable":return{type:SUCCESS,len:t+1,value:new pl.type.Var(u.value)};case"string":var a;switch(e.get_flag("double_quotes").id){case"atom":a=new Term(u.value,[]);break;case"codes":a=new Term("[]",[]);for(var o=u.value.length-1;o>=0;o--)a=new Term(".",[new pl.type.Num(codePointAt(u.value,o),!1),a]);break;case"chars":a=new Term("[]",[]);for(o=u.value.length-1;o>=0;o--)a=new Term(".",[new pl.type.Term(u.value.charAt(o),[]),a])}return{type:SUCCESS,len:t+1,value:a};case"l_paren":return(_=parseExpr(e,r,t+1,e.__get_max_priority(),!0)).type!==SUCCESS?_:r[_.len]&&"r_paren"===r[_.len].name?(_.len++,_):{type:ERROR,derived:!0,value:pl.error.syntax(r[_.len]?r[_.len]:r[_.len-1],") or operator expected",!r[_.len])};case"l_bracket":return(_=parseExpr(e,r,t+1,e.__get_max_priority(),!0)).type!==SUCCESS?_:r[_.len]&&"r_bracket"===r[_.len].name?(_.len++,_.value=new Term("{}",[_.value]),_):{type:ERROR,derived:!0,value:pl.error.syntax(r[_.len]?r[_.len]:r[_.len-1],"} or operator expected",!r[_.len])}}var s=parseTerm(e,r,t,n);return s.type===SUCCESS||s.derived?s:(s=parseList(e,r,t)).type===SUCCESS||s.derived?s:{type:ERROR,derived:!1,value:pl.error.syntax(r[t],"unexpected token")}}e.__get_max_priority();var l=e.__get_next_priority(i),p=t;if("atom"===r[t].name&&r[t+1]&&(r[t].space||"l_paren"!==r[t+1].name)){var u=r[t++];if((d=e.__lookup_operator_classes(i,u.value))&&d.indexOf("fy")>-1){if((_=parseExpr(e,r,t,i,n)).type!==ERROR)return"-"===u.value&&!u.space&&pl.type.is_number(_.value)?{value:new pl.type.Num(-_.value.value,_.value.is_float),len:_.len,type:SUCCESS}:{value:new pl.type.Term(u.value,[_.value]),len:_.len,type:SUCCESS};_}else if(d&&d.indexOf("fx")>-1){var _;if((_=parseExpr(e,r,t,l,n)).type!==ERROR)return{value:new pl.type.Term(u.value,[_.value]),len:_.len,type:SUCCESS};_}}if((_=parseExpr(e,r,t=p,l,n)).type===SUCCESS){u=r[t=_.len];if(r[t]&&("atom"===r[t].name&&e.__lookup_operator_classes(i,u.value)||"bar"===r[t].name&&e.__lookup_operator_classes(i,"|"))){var c=l,f=i;if((d=e.__lookup_operator_classes(i,u.value)).indexOf("xf")>-1)return{value:new pl.type.Term(u.value,[_.value]),len:++_.len,type:SUCCESS};if(d.indexOf("xfx")>-1)return(m=parseExpr(e,r,t+1,c,n)).type===SUCCESS?{value:new pl.type.Term(u.value,[_.value,m.value]),len:m.len,type:SUCCESS}:(m.derived=!0,m);if(d.indexOf("xfy")>-1)return(m=parseExpr(e,r,t+1,f,n)).type===SUCCESS?{value:new pl.type.Term(u.value,[_.value,m.value]),len:m.len,type:SUCCESS}:(m.derived=!0,m);if(_.type!==ERROR)for(;;){var d;if(!(u=r[t=_.len])||"atom"!==u.name||!e.__lookup_operator_classes(i,u.value))break;if((d=e.__lookup_operator_classes(i,u.value)).indexOf("yf")>-1)_={value:new pl.type.Term(u.value,[_.value]),len:++t,type:SUCCESS};else{if(!(d.indexOf("yfx")>-1))break;var m;if((m=parseExpr(e,r,++t,c,n)).type===ERROR)return m.derived=!0,m;t=m.len,_={value:new pl.type.Term(u.value,[_.value,m.value]),len:t,type:SUCCESS}}}}else({type:ERROR,value:pl.error.syntax(r[_.len-1],"operator expected")});return _}return _}function parseTerm(e,r,t,i){if(!r[t]||"atom"===r[t].name&&"."===r[t].raw&&!i&&(r[t].space||!r[t+1]||"l_paren"!==r[t+1].name))return{type:ERROR,derived:!1,value:pl.error.syntax(r[t-1],"unfounded token")};var n=r[t],a=[];if("atom"===r[t].name&&","!==r[t].raw){if(r[++t-1].space)return{type:SUCCESS,len:t,value:new pl.type.Term(n.value,a)};if(r[t]&&"l_paren"===r[t].name){if(r[t+1]&&"r_paren"===r[t+1].name)return{type:ERROR,derived:!0,value:pl.error.syntax(r[t+1],"argument expected")};var o=parseExpr(e,r,++t,"999",!0);if(o.type===ERROR)return o.derived?o:{type:ERROR,derived:!0,value:pl.error.syntax(r[t]?r[t]:r[t-1],"argument expected",!r[t])};for(a.push(o.value),t=o.len;r[t]&&"atom"===r[t].name&&","===r[t].value;){if((o=parseExpr(e,r,t+1,"999",!0)).type===ERROR)return o.derived?o:{type:ERROR,derived:!0,value:pl.error.syntax(r[t+1]?r[t+1]:r[t],"argument expected",!r[t+1])};a.push(o.value),t=o.len}if(!r[t]||"r_paren"!==r[t].name)return{type:ERROR,derived:!0,value:pl.error.syntax(r[t]?r[t]:r[t-1],", or ) expected",!r[t])};t++}return{type:SUCCESS,len:t,value:new pl.type.Term(n.value,a)}}return{type:ERROR,derived:!1,value:pl.error.syntax(r[t],"term expected")}}function parseList(e,r,t){if(!r[t])return{type:ERROR,derived:!1,value:pl.error.syntax(r[t-1],"[ expected")};if(r[t]&&"l_brace"===r[t].name){var i=parseExpr(e,r,++t,"999",!0),n=[i.value],a=void 0;if(i.type===ERROR)return r[t]&&"r_brace"===r[t].name?{type:SUCCESS,len:t+1,value:new pl.type.Term("[]",[])}:{type:ERROR,derived:!0,value:pl.error.syntax(r[t],"] expected")};for(t=i.len;r[t]&&"atom"===r[t].name&&","===r[t].value;){if((i=parseExpr(e,r,t+1,"999",!0)).type===ERROR)return i.derived?i:{type:ERROR,derived:!0,value:pl.error.syntax(r[t+1]?r[t+1]:r[t],"argument expected",!r[t+1])};n.push(i.value),t=i.len}var o=!1;if(r[t]&&"bar"===r[t].name){if(o=!0,(i=parseExpr(e,r,t+1,"999",!0)).type===ERROR)return i.derived?i:{type:ERROR,derived:!0,value:pl.error.syntax(r[t+1]?r[t+1]:r[t],"argument expected",!r[t+1])};a=i.value,t=i.len}return r[t]&&"r_brace"===r[t].name?{type:SUCCESS,len:t+1,value:arrayToList(n,a)}:{type:ERROR,derived:!0,value:pl.error.syntax(r[t]?r[t]:r[t-1],o?"] expected":", or | or ] expected",!r[t])}}return{type:ERROR,derived:!1,value:pl.error.syntax(r[t],"list expected")}}function parseRule(e,r,t){var i,n=r[t].line,a=parseExpr(e,r,t,e.__get_max_priority(),!1),o=null;if(a.type!==ERROR){if(r[t=a.len]&&"atom"===r[t].name&&"."===r[t].raw){if(t++,pl.type.is_term(a.value)){if(":-/2"===a.value.indicator)i={value:o=new pl.type.Rule(a.value.args[0],body_conversion(a.value.args[1])),len:t,type:SUCCESS};else if("--\x3e/2"===a.value.indicator){if(o=rule_to_dcg(new pl.type.Rule(a.value.args[0],a.value.args[1]),e),!pl.type.is_rule(o))return{value:o,len:t,type:ERROR};o.body=body_conversion(o.body),i={value:o,len:t,type:pl.type.is_rule(o)?SUCCESS:ERROR}}else i={value:o=new pl.type.Rule(a.value,null),len:t,type:SUCCESS};if(o){var s=o.singleton_variables();s.length>0&&e.throw_warning(pl.warning.singleton(s,o.head.indicator,n))}return i}return{type:ERROR,value:pl.error.syntax(r[t],"callable expected")}}return{type:ERROR,value:pl.error.syntax(r[t]?r[t]:r[t-1],". or operator expected")}}return a}function parseProgram(e,r,t){(t=t||{}).from=t.from?t.from:"$tau-js",t.reconsult=void 0===t.reconsult||t.reconsult;var i=new Tokenizer(e),n={};i.new_text(r);for(var a=0,o=i.get_tokens(a);null!==o&&o[a];){var s=parseRule(e,o,a);if(s.type===ERROR)return new Term("throw",[s.value]);var l=e.session.rules["term_expansion/2"];if(l&&l.length>0){var p=new Thread(e.session),u=s.value.body?new Term(":-",[s.value.head,s.value.body]):s.value.head;u=u.rename(e.session),p.query("term_expansion("+u.toString()+", X)."),p.answer(function(r){if(r&&!pl.type.is_error(r)&&pl.type.is_term(r.links.X)){var i=r.links.X,a=":-/2"===i.indicator?new Rule(i.args[0],i.args[1]):new Rule(i,null);parseProgramExpansion(e,t,n,{value:a,len:s.len,type:s.type})}else parseProgramExpansion(e,t,n,s)})}else parseProgramExpansion(e,t,n,s);a=s.len,null===s.value.body&&":-/1"===s.value.head.indicator&&"char_conversion/2"===s.value.head.args[0].indicator&&(o=i.get_tokens(a),a=0)}return!0}function parseGoalExpansion(e,r,t,i,n){var a=new Thread(e.session);a.__goal_expansion=!0;var o=e.next_free_variable(),s=e.next_free_variable(),l=s+" = "+r+", goal_expansion("+t+", "+o+").";a.query(l),a.answer(function(r){r&&!pl.type.is_error(r)&&r.links[o]&&(i(r.links[s],body_conversion(r.links[o])),parseGoalExpansion(e,n.head(),n.term(),n.set,n))})}function parseQueryExpansion(e,r){var t=new Thread(e.session);t.__goal_expansion=!0;var i=e.next_free_variable(),n="goal_expansion("+r+", "+i+").";t.query(n);var a=t.head_point().substitution.domain();t.answer(function(t){if(t&&!pl.type.is_error(t)&&t.links[i]){for(var n=0;n<a.length;n++)if(a[n]!==i.id&&t.links[a[n]]){var o=new Substitution;o.links[t.links[a[n]]]=a[n],t.links[i]=t.links[i].apply(o)}parseQueryExpansion(e,body_conversion(t.links[i]))}else e.add_goal(r)})}function parseProgramExpansion(e,r,t,i){if(null===i.value.body&&"?-/1"===i.value.head.indicator){var n=new Thread(e.session);n.add_goal(i.value.head.args[0]),n.answer(function(r){pl.type.is_error(r)?e.throw_warning(r.args[0]):!1!==r&&null!==r||e.throw_warning(pl.warning.failed_goal(i.value.head.args[0],i.len))})}else if(null===i.value.body&&":-/1"===i.value.head.indicator)e.run_directive(i.value.head.args[0]);else{indicator=i.value.head.indicator,!1===r.reconsult||!0===t[indicator]||e.is_multifile_predicate(indicator)||(e.session.rules[indicator]=filter(e.session.rules[indicator]||[],function(e){return e.dynamic}),t[indicator]=!0);var a=e.session.rules["goal_expansion/2"];if(null!==i.value.body&&a&&a.length>0){e.renamed_variables={};var o={head:function(){return i.value.head},term:function(){return i.value.body},set:function(e,r){i.value.head=e,i.value.body=r}};parseGoalExpansion(e,i.value.head,body_conversion(i.value.body),o.set,o)}e.add_rule(i.value,r)}}function parseQuery(e,r){var t=new Tokenizer(e);t.new_text(r);for(var i=0;;){var n=t.get_tokens(i);if(null===n)break;var a=parseExpr(e,n,0,e.__get_max_priority(),!1);if(a.type===ERROR)return new Term("throw",[a.value]);var o=a.len;if(!n[o]||"atom"!==n[o].name||"."!==n[o].raw){var s=n[o];return new Term("throw",[pl.error.syntax(s||n[o-1],". or operator expected",!s)])}a.value=body_conversion(a.value);var l=e.session.rules["goal_expansion/2"];!e.__goal_expansion&&l&&l.length>0?parseQueryExpansion(e,a.value):e.add_goal(a.value),i=a.len+1}return!0}function rule_to_dcg(e,r){e=e.rename(r);var t=r.next_free_variable(),i=body_to_dcg(e.body,t,r);if(i.error)return i.value;if(e.body=i.value,",/2"===e.head.indicator){var n=e.head.args[1];e.head=e.head.args[0];var a=r.next_free_variable(),o=n;if(!pl.type.is_list(o))return pl.error.type("list",o,"DCG/0");if("[]/0"===o.indicator)n=i.variable;else{for(;"./2"===o.indicator&&pl.type.is_list(o)&&"[]/0"!==o.args[1].indicator;)o=o.args[1];if(pl.type.is_variable(o))return pl.error.instantiation("DCG/0");if(!pl.type.is_list(o))return pl.error.type("list",n,"DCG/0");o.args[1]=i.variable}e.body=new Term(",",[e.body,new Term("=",[a,n])]),e.head=new Term(e.head.id,e.head.args.concat([t,a]))}else{var s=e.body;pl.type.is_term(s)&&",/2"===s.indicator&&(s=s.args[0]),pl.type.is_term(s)&&"=/2"===s.indicator&&pl.type.is_variable(s.args[0])&&s.args[0]===t&&(t=s.args[1],e.body=e.body.replace(null)),e.head=new Term(e.head.id,e.head.args.concat([t,i.variable]))}return e}function body_to_dcg(e,r,t){var i;if(pl.type.is_term(e)&&"!/0"===e.indicator)return{value:new Term(",",[e,new Term("=",[r,i=t.next_free_variable()])]),variable:i,error:!1};if(pl.type.is_term(e)&&"\\+/1"===e.indicator)return(n=body_to_dcg(e.args[0],r,t)).error?n:{value:new Term(e.id,[n.value]),variable:r,error:!1};if(!pl.type.is_term(e)||",/2"!==e.indicator&&"->/2"!==e.indicator){var n,a;if(pl.type.is_term(e)&&";/2"===e.indicator)return(n=body_to_dcg(e.args[0],r,t)).error?n:(a=body_to_dcg(e.args[1],r,t)).error?a:{value:new Term(",",[new Term(";",[n.value,a.value]),new Term("=",[n.variable,a.variable])]),variable:a.variable,error:!1};if(pl.type.is_term(e)&&"{}/1"===e.indicator)return i=t.next_free_variable(),{value:new Term(",",[e.args[0],new Term("=",[r,i])]),variable:i,error:!1};if(pl.type.is_empty_list(e))return{value:new Term("true",[]),variable:r,error:!1};if(pl.type.is_list(e)){i=t.next_free_variable();for(var o,s=e;"./2"===s.indicator;)o=s,s=s.args[1];return pl.type.is_variable(s)?{value:pl.error.instantiation("DCG/0"),variable:r,error:!0}:pl.type.is_empty_list(s)?(o.args[1]=i,{value:new Term("=",[r,e]),variable:i,error:!1}):{value:pl.error.type("list",e,"DCG/0"),variable:r,error:!0}}return pl.type.is_callable(e)?(i=t.next_free_variable(),{value:e=new Term(e.id,e.args.concat([r,i])),variable:i,error:!1}):{value:pl.error.type("callable",e,"DCG/0"),variable:r,error:!0}}return(n=body_to_dcg(e.args[0],r,t)).error?n:(a=body_to_dcg(e.args[1],n.variable,t)).error?a:{value:new Term(e.id,[n.value,a.value]),variable:a.variable,error:!1}}function body_conversion(e){return pl.type.is_variable(e)?new Term("call",[e]):pl.type.is_term(e)&&-1!==[",/2",";/2","->/2"].indexOf(e.indicator)?new Term(e.id,[body_conversion(e.args[0]),body_conversion(e.args[1])]):e}function arrayToList(e,r){for(var t=r||new Term("[]",[]),i=e.length-1;i>=0;i--)t=new Term(".",[e[i],t]);return t}function remove(e,r){for(var t=e.length-1;t>=0;t--)e[t]===r&&e.splice(t,1)}function nub(e){for(var r={},t=[],i=0;i<e.length;i++)e[i]in r||(t.push(e[i]),r[e[i]]=!0);return t}function retract(e,r,t,i){if(null!==e.session.rules[t])for(var n=0;n<e.session.rules[t].length;n++)if(e.session.rules[t][n]===i){e.session.rules[t].splice(n,1),e.success(r);break}}function callN(e){return function(r,t,i){var n=i.args[0],a=i.args.slice(1,e);if(pl.type.is_variable(n))r.throw_error(pl.error.instantiation(r.level));else if(pl.type.is_callable(n)){var o=new Term(n.id,n.args.concat(a));r.prepend([new State(t.goal.replace(o),t.substitution,t)])}else r.throw_error(pl.error.type("callable",n,r.level))}}function str_indicator(e){for(var r=e.length-1;r>=0;r--)if("/"===e.charAt(r))return new Term("/",[new Term(e.substring(0,r)),new Num(parseInt(e.substring(r+1)),!1)])}function Var(e){this.id=e}function Num(e,r){this.is_float=void 0!==r?r:parseInt(e)!==e,this.value=this.is_float?e:parseInt(e)}Tokenizer.prototype.set_last_tokens=function(e){return this.tokens=e},Tokenizer.prototype.new_text=function(e){this.text=e,this.tokens=[]},Tokenizer.prototype.get_tokens=function(e){var r,t=0,i=0,n=0,a=[];e?(t=(u=this.tokens[e-1]).len,r=replace(this.thread,this.text.substr(u.len)),i=u.line,n=u.start):r=this.text;if(/^\s*$/.test(r))return null;for(;""!==r;){var o=[],s=!1;if(null===/^\n/.exec(r)){for(var l in rules)if(rules.hasOwnProperty(l)){var p=rules[l].exec(r);p&&o.push({value:p[0],name:l,matches:p})}if(!o.length)return this.set_last_tokens([{value:r,matches:[],name:"lexical",line:i,start:n}]);var u;switch((u=reduce(o,function(e,r){return e.value.length>=r.value.length?e:r})).start=n,u.line=i,r=r.replace(u.value,""),n+=u.value.length,t+=u.value.length,u.name){case"atom":u.raw=u.value,"'"===u.value.charAt(0)&&(u.value=escapeAtom(u.value.substr(1,u.value.length-2),"'"),null===u.value&&(u.name="lexical",u.value="unknown escape sequence"));break;case"number":u.float="0x"!==u.value.substring(0,2)&&null!==u.value.match(/[.eE]/)&&"0'."!==u.value,u.value=convertNum(u.value),u.blank=s;break;case"string":var _=u.value.charAt(0);u.value=escapeAtom(u.value.substr(1,u.value.length-2),_),null===u.value&&(u.name="lexical",u.value="unknown escape sequence");break;case"whitespace":var c=a[a.length-1];c&&(c.space=!0),s=!0;continue;case"r_bracket":a.length>0&&"l_bracket"===a[a.length-1].name&&((u=a.pop()).name="atom",u.value="{}",u.raw="{}",u.space=!1);break;case"r_brace":a.length>0&&"l_brace"===a[a.length-1].name&&((u=a.pop()).name="atom",u.value="[]",u.raw="[]",u.space=!1)}u.len=t,a.push(u),s=!1}else i++,n=0,t++,r=r.replace(/\n/,""),!0}var f=this.set_last_tokens(a);return 0===f.length?null:f};var term_ref=0;function Term(e,r,t){term_ref++,this.ref=t||term_ref,this.id=e,this.args=r||[],this.indicator=e+"/"+this.args.length}var stream_ref=0;function Stream(e,r,t,i,n,a){this.id=stream_ref++,this.stream=e,this.mode=r,this.alias=t,this.type=void 0!==i?i:"text",this.reposition=void 0===n||n,this.eof_action=void 0!==a?a:"eof_code",this.position="append"===this.mode?"end_of_stream":0,this.output="write"===this.mode||"append"===this.mode,this.input="read"===this.mode}function Substitution(e,r){e=e||{},r=r||{},this.links=e,this.attrs=r}function State(e,r,t){r=r||new Substitution,t=t||null,this.goal=e,this.substitution=r,this.parent=t}function Rule(e,r,t){this.head=e,this.body=r,this.dynamic=t||!1}function Session(e){e=void 0===e||e<=0?1e3:e,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Thread(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=e,this.streams={user_input:new Stream(nodejs_flag?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Stream(nodejs_flag?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=nodejs_flag?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(e){return e.substitution},this.format_error=function(e){return e.goal},this.flag={bounded:pl.flag.bounded.value,max_integer:pl.flag.max_integer.value,min_integer:pl.flag.min_integer.value,integer_rounding_function:pl.flag.integer_rounding_function.value,char_conversion:pl.flag.char_conversion.value,debug:pl.flag.debug.value,max_arity:pl.flag.max_arity.value,unknown:pl.flag.unknown.value,double_quotes:pl.flag.double_quotes.value,occurs_check:pl.flag.occurs_check.value,dialect:pl.flag.dialect.value,version_data:pl.flag.version_data.value,nodejs:pl.flag.nodejs.value,argv:pl.flag.argv.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"--\x3e":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1000:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Thread(e){this.epoch=Date.now(),this.session=e,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[],this.__goal_expansion=!1}function Module(e,r,t){this.id=e,this.rules=r,this.exports=t,pl.module[e]=this}Module.prototype.exports_predicate=function(e){return-1!==this.exports.indexOf(e)},Var.prototype.unify=function(e,r){if(r&&-1!==indexOf(e.variables(),this.id)&&!pl.type.is_variable(e))return null;var t={};return t[this.id]=e,new Substitution(t)},Num.prototype.unify=function(e,r){return pl.type.is_number(e)&&this.value===e.value&&this.is_float===e.is_float?new Substitution:null},Term.prototype.unify=function(e,r){if(pl.type.is_term(e)&&this.indicator===e.indicator){for(var t=new Substitution,i=0;i<this.args.length;i++){var n=pl.unify(this.args[i].apply(t),e.args[i].apply(t),r);if(null===n)return null;for(var a in n.links)t.links[a]=n.links[a];t=t.apply(n)}return t}return null},Stream.prototype.unify=function(e,r){return pl.type.is_stream(e)&&this.id===e.id?new Substitution:null},Var.prototype.toString=function(e){return this.id},Num.prototype.toString=function(e){return this.is_float&&-1===indexOf(this.value.toString(),".")?this.value+".0":this.value.toString()},Term.prototype.toString=function(e,r,t){if((e=e||{}).quoted=void 0===e.quoted||e.quoted,e.ignore_ops=void 0!==e.ignore_ops&&e.ignore_ops,e.numbervars=void 0!==e.numbervars&&e.numbervars,r=void 0===r?{priority:999,class:"",indicator:""}:r,t=void 0===t?"":t,e.numbervars&&"$VAR/1"===this.indicator&&pl.type.is_integer(this.args[0])&&this.args[0].value>=0){var i=this.args[0].value,n=Math.floor(i/26);return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%26]+(0!==n?n:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(e)+"}";case"./2":if(!1===e.ignore_ops){for(var a="["+this.args[0].toString(e),o=this.args[1];"./2"===o.indicator;)a+=", "+o.args[0].toString(e),o=o.args[1];return"[]/0"!==o.indicator&&(a+="|"+o.toString(e)),a+="]"}default:var s=this.id,l=e.session?e.session.lookup_operator(this.id,this.args.length):null;if(void 0===e.session||e.ignore_ops||null===l)return e.quoted&&!/^(!|[a-z][0-9a-zA-Z_]*)$/.test(s)&&"{}"!==s&&"[]"!==s&&(s="'"+redoEscape(s)+"'"),s+(this.args.length?"("+map(this.args,function(r){return r.toString(e)}).join(", ")+")":"");var p=parseInt(l.priority),u=parseInt(r.priority),_=p>u||p===u&&("xfx"===l.class||"xfy"===l.class&&this.indicator!==r.indicator||"yfx"===l.class&&this.indicator!==r.indicator||this.indicator===r.indicator&&"yfx"===l.class&&"right"===t||this.indicator===r.indicator&&"xfy"===l.class&&"left"===t);l.indicator=this.indicator;var c=_?"(":"",f=_?")":"";return 0===this.args.length?"("+this.id+")":-1!==["fy","fx"].indexOf(l.class)?c+s+" "+this.args[0].toString(e,l)+f:-1!==["yf","xf"].indexOf(l.class)?c+this.args[0].toString(e,l)+" "+s+f:c+this.args[0].toString(e,l,"left")+" "+this.id+" "+this.args[1].toString(e,l,"right")+f}},Stream.prototype.toString=function(e){return"<stream>("+this.id+")"},Substitution.prototype.toString=function(e){var r="{";for(var t in this.links)this.links.hasOwnProperty(t)&&("{"!==r&&(r+=", "),r+=t+"/"+this.links[t].toString(e));return r+="}"},State.prototype.toString=function(e){return null===this.goal?"<"+this.substitution.toString(e)+">":"<"+this.goal.toString(e)+", "+this.substitution.toString(e)+">"},Rule.prototype.toString=function(e){return this.body?this.head.toString(e)+" :- "+this.body.toString(e)+".":this.head.toString(e)+"."},Session.prototype.toString=function(e){for(var r="",t=0;t<this.modules.length;t++)r+=":- use_module(library("+this.modules[t]+")).\n";for(key in r+="\n",this.rules)for(t=0;t<this.rules[key].length;t++)r+=this.rules[key][t].toString(e),r+="\n";return r},Var.prototype.clone=function(){return new Var(this.id)},Num.prototype.clone=function(){return new Num(this.value,this.is_float)},Term.prototype.clone=function(){return new Term(this.id,map(this.args,function(e){return e.clone()}))},Stream.prototype.clone=function(){return new Stram(this.stream,this.mode,this.alias,this.type,this.reposition,this.eof_action)},Substitution.prototype.clone=function(){var e={},r={};for(var t in this.links)this.links.hasOwnProperty(t)&&(e[t]=this.links[t].clone());for(var i in this.attrs)if(this.attrs.hasOwnProperty(r))for(var n in r[i]={},this.attrs[i])this.attrs[i].hasOwnProperty(n)&&(r[i][n]=this.attrs[i][n].clone());return new Substitution(e,r)},State.prototype.clone=function(){return new State(this.goal.clone(),this.substitution.clone(),this.parent)},Rule.prototype.clone=function(){return new Rule(this.head.clone(),null!==this.body?this.body.clone():null)},Var.prototype.equals=function(e){return pl.type.is_variable(e)&&this.id===e.id},Num.prototype.equals=function(e){return pl.type.is_number(e)&&this.value===e.value&&this.is_float===e.is_float},Term.prototype.equals=function(e){if(!pl.type.is_term(e)||this.indicator!==e.indicator)return!1;for(var r=0;r<this.args.length;r++)if(!this.args[r].equals(e.args[r]))return!1;return!0},Stream.prototype.equals=function(e){return pl.type.is_stream(e)&&this.id===e.id},Substitution.prototype.equals=function(e){var r;if(!pl.type.is_substitution(e))return!1;for(r in this.links)if(this.links.hasOwnProperty(r)&&(!e.links[r]||!this.links[r].equals(e.links[r])))return!1;for(r in e.links)if(e.links.hasOwnProperty(r)&&!this.links[r])return!1;return!0},State.prototype.equals=function(e){return pl.type.is_state(e)&&this.goal.equals(e.goal)&&this.substitution.equals(e.substitution)&&this.parent===e.parent},Rule.prototype.equals=function(e){return pl.type.is_rule(e)&&this.head.equals(e.head)&&(null===this.body&&null===e.body||null!==this.body&&this.body.equals(e.body))},Var.prototype.rename=function(e){return e.get_free_variable(this)},Num.prototype.rename=function(e){return this},Term.prototype.rename=function(e){if("./2"===this.indicator){for(var r=[],t=this,i=-1,n=null,a=0;"./2"===t.indicator;){var o=(u=t.args[0].rename(e))==t.args[0];r.push(u),t=t.args[1],o||(i=a,n=t),a++}o=(s=t.rename(e))==t;if(-1===i&&o)return this;var s=o?n:s;for(a=o?i:r.length-1;a>=0;a--)s=new Term(".",[r[a],s]);return s}var l=!0,p=[];for(a=0;a<this.args.length;a++){var u=this.args[a].rename(e);l=l&&this.args[a]==u,p.push(u)}return new Term(this.id,p)},Stream.prototype.rename=function(e){return this},Rule.prototype.rename=function(e){return new Rule(this.head.rename(e),null!==this.body?this.body.rename(e):null)},Var.prototype.variables=function(){return[this.id]},Num.prototype.variables=function(){return[]},Term.prototype.variables=function(){return[].concat.apply([],map(this.args,function(e){return e.variables()}))},Stream.prototype.variables=function(){return[]},Rule.prototype.variables=function(){return null===this.body?this.head.variables():this.head.variables().concat(this.body.variables())},Var.prototype.apply=function(e){return e.lookup(this.id)?e.lookup(this.id):this},Num.prototype.apply=function(e){return this},Term.prototype.apply=function(e){if(0===this.args.length)return this;if("./2"===this.indicator){for(var r=[],t=this,i=-1,n=null,a=0;"./2"===t.indicator;){var o=(u=t.args[0].apply(e))==t.args[0];r.push(u),t=t.args[1],o||(i=a,n=t),a++}o=(s=t.apply(e))==t;if(-1===i&&o)return this;var s=o?n:s;for(a=o?i:r.length-1;a>=0;a--)s=new Term(".",[r[a],s]);return s}var l=!0,p=[];for(a=0;a<this.args.length;a++){var u=this.args[a].apply(e);l=l&&this.args[a]==u,p.push(u)}return l?this:new Term(this.id,p,this.ref)},Stream.prototype.apply=function(e){return this},Rule.prototype.apply=function(e){return new Rule(this.head.apply(e),null!==this.body?this.body.apply(e):null)},Substitution.prototype.apply=function(e){var r,t,i,n={},a={};for(r in this.links)this.links.hasOwnProperty(r)&&(n[r]=this.links[r].apply(e));for(t in this.attrs)if(this.attrs.hasOwnProperty(t))for(i in a[t]={},this.attrs[t])this.attrs[t].hasOwnProperty(i)&&(a[t][i]=this.attrs[t][i].apply(e));return new Substitution(n,a)},Term.prototype.select=function(){for(var e=this;",/2"===e.indicator;)e=e.args[0];return e},Term.prototype.replace=function(e){return",/2"===this.indicator?",/2"===this.args[0].indicator?new Term(",",[this.args[0].replace(e),this.args[1]]):null===e?this.args[1]:new Term(",",[e,this.args[1]]):e},Term.prototype.search=function(e){if(this==e||this.ref===e.ref)return!0;for(var r=0;r<this.args.length;r++)if(pl.type.is_term(this.args[r])&&this.args[r].search(e))return!0;return!1},Session.prototype.get_current_input=function(){return this.current_input},Thread.prototype.get_current_input=function(){return this.session.get_current_input()},Session.prototype.get_current_output=function(){return this.current_output},Thread.prototype.get_current_output=function(){return this.session.get_current_output()},Session.prototype.set_current_input=function(e){this.current_input=e},Thread.prototype.set_current_input=function(e){return this.session.set_current_input(e)},Session.prototype.set_current_output=function(e){this.current_output=e},Thread.prototype.set_current_output=function(e){return this.session.set_current_output(e)},Session.prototype.get_stream_by_alias=function(e){return this.streams[e]},Thread.prototype.get_stream_by_alias=function(e){return this.session.get_stream_by_alias(e)},Session.prototype.file_system_open=function(e,r,t){return this.file_system.open(e,r,t)},Thread.prototype.file_system_open=function(e,r,t){return this.session.file_system_open(e,r,t)},Session.prototype.get_char_conversion=function(e){return this.__char_conversion[e]||e},Thread.prototype.get_char_conversion=function(e){return this.session.get_char_conversion(e)},Session.prototype.parse=function(e){return this.thread.parse(e)},Thread.prototype.parse=function(e){var r=new Tokenizer(this);r.new_text(e);var t=r.get_tokens();if(null===t)return!1;var i=parseExpr(this,t,0,this.__get_max_priority(),!1);return i.len===t.length&&{value:i.value,expr:i,tokens:t}},Session.prototype.get_flag=function(e){return this.flag[e]},Thread.prototype.get_flag=function(e){return this.session.get_flag(e)},Session.prototype.add_rule=function(e,r){return(r=r||{}).from=r.from?r.from:"$tau-js",this.src_predicates[e.head.indicator]=r.from,this.rules[e.head.indicator]||(this.rules[e.head.indicator]=[]),this.rules[e.head.indicator].push(e),this.public_predicates.hasOwnProperty(e.head.indicator)||(this.public_predicates[e.head.indicator]=!1),!0},Thread.prototype.add_rule=function(e,r){return this.session.add_rule(e,r)},Session.prototype.run_directive=function(e){this.thread.run_directive(e)},Thread.prototype.run_directive=function(e){return!!pl.type.is_directive(e)&&(pl.directive[e.indicator](this,e),!0)},Session.prototype.__get_max_priority=function(){return"1200"},Thread.prototype.__get_max_priority=function(){return this.session.__get_max_priority()},Session.prototype.__get_next_priority=function(e){var r=0;for(var t in e=parseInt(e),this.__operators)if(this.__operators.hasOwnProperty(t)){var i=parseInt(t);i>r&&i<e&&(r=i)}return r.toString()},Thread.prototype.__get_next_priority=function(e){return this.session.__get_next_priority(e)},Session.prototype.__lookup_operator_classes=function(e,r){return this.__operators.hasOwnProperty(e)&&this.__operators[e][r]instanceof Array&&this.__operators[e][r]||!1},Thread.prototype.__lookup_operator_classes=function(e,r){return this.session.__lookup_operator_classes(e,r)},Session.prototype.lookup_operator=function(e,r){for(var t in this.__operators)if(this.__operators[t][e])for(var i=0;i<this.__operators[t][e].length;i++)if(0===r||this.__operators[t][e][i].length===r+1)return{priority:t,class:this.__operators[t][e][i]};return null},Thread.prototype.lookup_operator=function(e,r){return this.session.lookup_operator(e,r)},Session.prototype.throw_warning=function(e){this.thread.throw_warning(e)},Thread.prototype.throw_warning=function(e){this.warnings.push(e)},Session.prototype.get_warnings=function(){return this.thread.get_warnings()},Thread.prototype.get_warnings=function(){return this.warnings},Session.prototype.add_goal=function(e,r){this.thread.add_goal(e,r)},Thread.prototype.add_goal=function(e,r,t){t=t||null,!0===r&&(this.points=[]);for(var i=e.variables(),n={},a=0;a<i.length;a++)n[i[a]]=new Var(i[a]);this.points.push(new State(e,new Substitution(n),t))},Session.prototype.consult=function(e,r){return this.thread.consult(e,r)},Thread.prototype.consult=function(e,r){var t="";if("string"==typeof e){(t=e).length;if(!nodejs_flag&&""!=e&&document.getElementById(t)){var i=document.getElementById(t),n=i.getAttribute("type");null!==n&&"text/prolog"===n.replace(/ /g,"").toLowerCase()&&(t=i.text)}else if(nodejs_flag){var a=require("fs");const r=a.existsSync(e);t=r?a.readFileSync(e).toString():e}else if(""!=e&&!/\s/.test(e))try{var o=new XMLHttpRequest;o.onreadystatechange=function(){4==this.readyState&&200==this.status&&(t=o.responseText)},o.open("GET",e,!1),o.send()}catch(e){}}else{if(!e.nodeName)return!1;switch(e.nodeName.toLowerCase()){case"input":case"textarea":t=e.value;break;default:t=e.innerHTML}}return this.warnings=[],parseProgram(this,t,r)},Session.prototype.query=function(e){return this.thread.query(e)},Thread.prototype.query=function(e){return this.points=[],this.debugger_points=[],parseQuery(this,e)},Session.prototype.head_point=function(){return this.thread.head_point()},Thread.prototype.head_point=function(){return this.points[this.points.length-1]},Session.prototype.get_free_variable=function(e){return this.thread.get_free_variable(e)},Thread.prototype.get_free_variable=function(e){var r=[];if("_"===e.id||void 0===this.session.renamed_variables[e.id]){for(this.session.rename++,this.current_point&&(r=this.current_point.substitution.domain());-1!==indexOf(r,pl.format_variable(this.session.rename));)this.session.rename++;if("_"===e.id)return new Var(pl.format_variable(this.session.rename));this.session.renamed_variables[e.id]=pl.format_variable(this.session.rename)}return new Var(this.session.renamed_variables[e.id])},Session.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Thread.prototype.next_free_variable=function(){this.session.rename++;var e=[];for(this.current_point&&(e=this.current_point.substitution.domain());-1!==indexOf(e,pl.format_variable(this.session.rename));)this.session.rename++;return new Var(pl.format_variable(this.session.rename))},Session.prototype.is_public_predicate=function(e){return!this.public_predicates.hasOwnProperty(e)||!0===this.public_predicates[e]},Thread.prototype.is_public_predicate=function(e){return this.session.is_public_predicate(e)},Session.prototype.is_multifile_predicate=function(e){return this.multifile_predicates.hasOwnProperty(e)&&!0===this.multifile_predicates[e]},Thread.prototype.is_multifile_predicate=function(e){return this.session.is_multifile_predicate(e)},Session.prototype.prepend=function(e){return this.thread.prepend(e)},Thread.prototype.prepend=function(e){for(var r=e.length-1;r>=0;r--)this.points.push(e[r])},Session.prototype.success=function(e,r){return this.thread.success(e,r)},Thread.prototype.success=function(e,r){r=void 0===r?e:r;this.prepend([new State(e.goal.replace(null),e.substitution,r)])},Session.prototype.throw_error=function(e){return this.thread.throw_error(e)},Thread.prototype.throw_error=function(e){this.prepend([new State(new Term("throw",[e]),new Substitution,null,null)])},Session.prototype.step_rule=function(e,r){return this.thread.step_rule(e,r)},Thread.prototype.step_rule=function(e,r){var t=r.indicator;if("user"===e&&(e=null),null===e&&this.session.rules.hasOwnProperty(t))return this.session.rules[t];for(var i=null===e?this.session.modules:-1===indexOf(this.session.modules,e)?[]:[e],n=0;n<i.length;n++){var a=pl.module[i[n]];if(a.rules.hasOwnProperty(t)&&(a.rules.hasOwnProperty(this.level)||a.exports_predicate(t)))return pl.module[i[n]].rules[t]}return null},Session.prototype.step=function(){return this.thread.step()},Thread.prototype.step=function(){if(0!==this.points.length){var e=!1,r=this.points.pop();if(this.current_point=r,this.debugger&&this.debugger_states.push(r),pl.type.is_term(r.goal)){var t=r.goal.select(),i=null,n=[];if(null!==t){this.total_steps++;for(var a=r;null!==a.parent&&a.parent.goal.search(t);)a=a.parent;if(this.level=null===a.parent?"top_level/0":a.parent.goal.select().indicator,pl.type.is_term(t)&&":/2"===t.indicator&&(i=t.args[0].id,t=t.args[1]),null===i&&pl.type.is_builtin(t))this.__call_indicator=t.indicator,e=pl.predicate[t.indicator](this,r,t);else{var o=this.step_rule(i,t);if(null===o)this.session.rules.hasOwnProperty(t.indicator)||("error"===this.get_flag("unknown").id?this.throw_error(pl.error.existence("procedure",t.indicator,this.level)):"warning"===this.get_flag("unknown").id&&this.throw_warning("unknown procedure "+t.indicator+" (from "+this.level+")"));else if(o instanceof Function)e=o(this,r,t);else{for(var s in this.__goal_expansion&&"goal_expansion/2"===t.indicator&&(o=o.concat(pl.predicate["goal_expansion/2"])),o)if(o.hasOwnProperty(s)){var l=o[s];this.session.renamed_variables={},l=l.rename(this);var p="true/0"===this.get_flag("occurs_check").indicator,u=new State,_=pl.unify(t,l.head,p);null!==_&&(u.goal=r.goal.replace(l.body),null!==u.goal&&(u.goal=u.goal.apply(_)),u.substitution=r.substitution.apply(_),u.parent=r,n.push(u))}this.prepend(n)}}}}else pl.type.is_variable(r.goal)?this.throw_error(pl.error.instantiation(this.level)):this.throw_error(pl.error.type("callable",r.goal,this.level));return e}},Session.prototype.answer=function(e){return this.thread.answer(e)},Thread.prototype.answer=function(e){e=e||function(e){},this.__calls.push(e),this.__calls.length>1||this.again()},Session.prototype.answers=function(e,r,t){return this.thread.answers(e,r,t)},Thread.prototype.answers=function(e,r,t){var i=this;r<=0?t&&t():this.answer(function(n){e(n),!1!==n?setTimeout(function(){i.answers(e,r-1,t)},1):t&&t()})},Session.prototype.again=function(e){return this.thread.again(e)},Thread.prototype.again=function(e){for(var r,t=Date.now();this.__calls.length>0;){for(this.warnings=[],!1!==e&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&null!==this.head_point().goal&&!pl.type.is_error(this.head_point().goal);)if(this.current_limit--,!0===this.step())return;var i=Date.now();this.cpu_time_last=i-t,this.cpu_time+=this.cpu_time_last;var n=this.__calls.shift();this.current_limit<=0?n(null):0===this.points.length?n(!1):pl.type.is_error(this.head_point().goal)?(r=this.session.format_error(this.points.pop()),this.points=[],n(r)):(this.debugger&&this.debugger_states.push(this.head_point()),n(r=this.session.format_success(this.points.pop())))}},Session.prototype.unfold=function(e){if(null===e.body)return!1;var r=e.head,t=e.body,i=t.select(),n=new Thread(this),a=[];n.add_goal(i),n.step();for(var o=n.points.length-1;o>=0;o--){var s=n.points[o],l=r.apply(s.substitution),p=t.replace(s.goal);null!==p&&(p=p.apply(s.substitution)),a.push(new Rule(l,p))}var u=this.rules[r.indicator],_=indexOf(u,e);return a.length>0&&-1!==_&&(u.splice.apply(u,[_,1].concat(a)),!0)},Thread.prototype.unfold=function(e){return this.session.unfold(e)},Var.prototype.interpret=function(e){return pl.error.instantiation(e.level)},Num.prototype.interpret=function(e){return this},Term.prototype.interpret=function(e){return pl.type.is_unitary_list(this)?this.args[0].interpret(e):pl.operate(e,this)},Var.prototype.compare=function(e){return this.id<e.id?-1:this.id>e.id?1:0},Num.prototype.compare=function(e){return this.value===e.value&&this.is_float===e.is_float?0:this.value<e.value||this.value===e.value&&this.is_float&&!e.is_float?-1:this.value>e.value?1:void 0},Term.prototype.compare=function(e){if(this.args.length<e.args.length||this.args.length===e.args.length&&this.id<e.id)return-1;if(this.args.length>e.args.length||this.args.length===e.args.length&&this.id>e.id)return 1;for(var r=0;r<this.args.length;r++){var t=pl.compare(this.args[r],e.args[r]);if(0!==t)return t}return 0},Substitution.prototype.lookup=function(e){return this.links[e]?this.links[e]:null},Substitution.prototype.filter=function(e){var r={};for(var t in this.links)if(this.links.hasOwnProperty(t)){var i=this.links[t];e(t,i)&&(r[t]=i)}return new Substitution(r,this.attrs)},Substitution.prototype.exclude=function(e){var r={};for(var t in this.links)this.links.hasOwnProperty(t)&&-1===indexOf(e,t)&&(r[t]=this.links[t]);return new Substitution(r,this.attrs)},Substitution.prototype.add=function(e,r){this.links[e]=r},Substitution.prototype.domain=function(e){var r=!0===e?function(e){return e}:function(e){return new Var(e)},t=[];for(var i in this.links)t.push(r(i));return t},Substitution.prototype.get_attribute=function(e,r){if(this.attrs[e])return this.attrs[e][r]},Substitution.prototype.set_attribute=function(e,r,t){var i=new Substitution(this.links);for(var n in this.attrs)if(n===e)for(var a in i.attrs[n]={},this.attrs[n])i.attrs[n][a]=this.attrs[n][a];else i.attrs[n]=this.attrs[n];return i.attrs[e]||(i.attrs[e]={}),i.attrs[e][r]=t,i},Substitution.prototype.has_attributes=function(e){return this.attrs[e]&&this.attrs[e]!=={}},Var.prototype.compile=function(){return'new pl.type.Var("'+this.id.toString()+'")'},Num.prototype.compile=function(){return"new pl.type.Num("+this.value.toString()+", "+this.is_float.toString()+")"},Term.prototype.compile=function(){return'new pl.type.Term("'+this.id.replace(/"/g,'\\"')+'", ['+map(this.args,function(e){return e.compile()})+"])"},Rule.prototype.compile=function(){return"new pl.type.Rule("+this.head.compile()+", "+(null===this.body?"null":this.body.compile())+")"},Session.prototype.compile=function(){var e,r,t=[];for(var i in this.rules)if(this.rules.hasOwnProperty(i)){var n=this.rules[i];r=[],e='"'+i+'": [';for(var a=0;a<n.length;a++)r.push(n[a].compile());e+=r.join(),e+="]",t.push(e)}return"{"+t.join()+"};"},Var.prototype.toJavaScript=function(){return this.toString()},Num.prototype.toJavaScript=function(){return this.value},Term.prototype.toJavaScript=function(){if(0===this.args.length&&"[]/0"!==this.indicator)return this.toString();if(pl.type.is_list(this)){for(var e,r=!0,t=[],i={},n=this;"./2"===n.indicator;)e=n.args[0].toJavaScript(),t.push(e),(r=r&&pl.type.is_term(n.args[0])&&"-/2"===n.args[0].indicator&&pl.type.is_atom(n.args[0].args[0]))&&(i[n.args[0].args[0].id]=n.args[0].args[1].toJavaScript()),n=n.args[1];if("[]/0"===n.indicator)return r&&t.length>0?i:t}return this.toString()},Rule.prototype.singleton_variables=function(){var e=this.head.variables(),r={},t=[];null!==this.body&&(e=e.concat(this.body.variables()));for(var i=0;i<e.length;i++)void 0===r[e[i]]&&(r[e[i]]=0),r[e[i]]++;for(var n in r)"_"!==n&&1===r[n]&&t.push(n);return t};var nodejs_flag="undefined"!=typeof module&&void 0!==module.exports,nodejs_arguments=nodejs_flag?arrayToList(map(process.argv.slice(1),function(e){return new Term(e)})):new Term("[]",[]),pl={__env:nodejs_flag?global:window,module:{},version:version,parser:{tokenizer:Tokenizer,expression:parseExpr},utils:{str_indicator:str_indicator,codePointAt:codePointAt,fromCodePoint:fromCodePoint},statistics:{getCountTerms:function(){return term_ref}},fromJavaScript:{test:{boolean:function(e,r){return!0===e||!1===e},number:function(e,r){return"number"==typeof e},string:function(e,r){return"string"==typeof e},list:function(e,r){return e instanceof Array},variable:function(e,r){return void 0===e},object:function(e,r){return(r=void 0!==r&&r)&&!(e instanceof Array)&&"object"==typeof e},any:function(e,r){return!0}},conversion:{boolean:function(e,r){return new Term(e?"true":"false",[])},number:function(e,r){return new Num(e,e%1!=0)},string:function(e,r){return new Term(e,[])},list:function(e,r){r=void 0!==r&&r;for(var t,i=[],n=0;n<e.length;n++){if(void 0===(t=pl.fromJavaScript.apply(e[n],r)))return;i.push(t)}return arrayToList(i)},variable:function(e,r){return new Var("_")},object:function(e,r){r=void 0!==r&&r;new Term("[]",[]);var t=[];for(var i in e)e.hasOwnProperty(i)&&t.push(new Term("-",[pl.fromJavaScript.apply(i,r),pl.fromJavaScript.apply(e[i],r)]));return arrayToList(t)},any:function(e,r){}},apply:function(e,r){for(var t in r=void 0!==r&&r,pl.fromJavaScript.test)if("any"!==t&&pl.fromJavaScript.test[t](e,r))return pl.fromJavaScript.conversion[t](e,r);return pl.fromJavaScript.conversion.any(e,r)}},type:{Var:Var,Num:Num,Term:Term,Rule:Rule,State:State,Stream:Stream,Module:Module,Thread:Thread,Session:Session,Substitution:Substitution,order:[Var,Num,Term,Stream],compare:function(e,r){var t=indexOf(pl.type.order,e.constructor),i=indexOf(pl.type.order,r.constructor);if(t<i)return-1;if(t>i)return 1;if(e.constructor===Num){if(e.is_float&&r.is_float)return 0;if(e.is_float)return-1;if(r.is_float)return 1}return 0},is_substitution:function(e){return e instanceof Substitution},is_state:function(e){return e instanceof State},is_rule:function(e){return e instanceof Rule},is_variable:function(e){return e instanceof Var},is_stream:function(e){return e instanceof Stream},is_anonymous_var:function(e){return e instanceof Var&&"_"===e.id},is_callable:function(e){return e instanceof Term},is_number:function(e){return e instanceof Num},is_integer:function(e){return e instanceof Num&&!e.is_float},is_float:function(e){return e instanceof Num&&e.is_float},is_term:function(e){return e instanceof Term},is_atom:function(e){return e instanceof Term&&0===e.args.length},is_ground:function(e){if(e instanceof Var)return!1;if(e instanceof Term)for(var r=0;r<e.args.length;r++)if(!pl.type.is_ground(e.args[r]))return!1;return!0},is_atomic:function(e){return e instanceof Term&&0===e.args.length||e instanceof Num},is_compound:function(e){return e instanceof Term&&e.args.length>0},is_list:function(e){return e instanceof Term&&("[]/0"===e.indicator||"./2"===e.indicator)},is_empty_list:function(e){return e instanceof Term&&"[]/0"===e.indicator},is_non_empty_list:function(e){return e instanceof Term&&"./2"===e.indicator},is_fully_list:function(e){for(;e instanceof Term&&"./2"===e.indicator;)e=e.args[1];return e instanceof Var||e instanceof Term&&"[]/0"===e.indicator},is_instantiated_list:function(e){for(;e instanceof Term&&"./2"===e.indicator;)e=e.args[1];return e instanceof Term&&"[]/0"===e.indicator},is_unitary_list:function(e){return e instanceof Term&&"./2"===e.indicator&&e.args[1]instanceof Term&&"[]/0"===e.args[1].indicator},is_character:function(e){return e instanceof Term&&(1===e.id.length||e.id.length>0&&e.id.length<=2&&codePointAt(e.id,0)>=65536)},is_character_code:function(e){return e instanceof Num&&!e.is_float&&e.value>=0&&e.value<=1114111},is_byte:function(e){return e instanceof Num&&!e.is_float&&e.value>=0&&e.value<=255},is_operator:function(e){return e instanceof Term&&pl.arithmetic.evaluation[e.indicator]},is_directive:function(e){return e instanceof Term&&void 0!==pl.directive[e.indicator]},is_builtin:function(e){return e instanceof Term&&void 0!==pl.predicate[e.indicator]&&"goal_expansion/2"!==e.indicator},is_error:function(e){return e instanceof Term&&"throw/1"===e.indicator},is_predicate_indicator:function(e){return e instanceof Term&&"//2"===e.indicator&&e.args[0]instanceof Term&&0===e.args[0].args.length&&e.args[1]instanceof Num&&!1===e.args[1].is_float},is_flag:function(e){return e instanceof Term&&0===e.args.length&&void 0!==pl.flag[e.id]},is_value_flag:function(e,r){if(!pl.type.is_flag(e))return!1;for(var t in pl.flag[e.id].allowed)if(pl.flag[e.id].allowed.hasOwnProperty(t)&&pl.flag[e.id].allowed[t].equals(r))return!0;return!1},is_io_mode:function(e){return pl.type.is_atom(e)&&-1!==["read","write","append"].indexOf(e.id)},is_stream_option:function(e){return pl.type.is_term(e)&&("alias/1"===e.indicator&&pl.type.is_atom(e.args[0])||"reposition/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("true"===e.args[0].id||"false"===e.args[0].id)||"type/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("text"===e.args[0].id||"binary"===e.args[0].id)||"eof_action/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("error"===e.args[0].id||"eof_code"===e.args[0].id||"reset"===e.args[0].id))},is_stream_position:function(e){return pl.type.is_integer(e)&&e.value>=0||pl.type.is_atom(e)&&("end_of_stream"===e.id||"past_end_of_stream"===e.id)},is_stream_property:function(e){return pl.type.is_term(e)&&("input/0"===e.indicator||"output/0"===e.indicator||"alias/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0]))||"file_name/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0]))||"position/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_stream_position(e.args[0]))||"reposition/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0])&&("true"===e.args[0].id||"false"===e.args[0].id))||"type/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0])&&("text"===e.args[0].id||"binary"===e.args[0].id))||"mode/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0])&&("read"===e.args[0].id||"write"===e.args[0].id||"append"===e.args[0].id))||"eof_action/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0])&&("error"===e.args[0].id||"eof_code"===e.args[0].id||"reset"===e.args[0].id))||"end_of_stream/1"===e.indicator&&(pl.type.is_variable(e.args[0])||pl.type.is_atom(e.args[0])&&("at"===e.args[0].id||"past"===e.args[0].id||"not"===e.args[0].id)))},is_streamable:function(e){return void 0!==e.__proto__.stream},is_read_option:function(e){return pl.type.is_term(e)&&-1!==["variables/1","variable_names/1","singletons/1"].indexOf(e.indicator)},is_write_option:function(e){return pl.type.is_term(e)&&("quoted/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("true"===e.args[0].id||"false"===e.args[0].id)||"ignore_ops/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("true"===e.args[0].id||"false"===e.args[0].id)||"numbervars/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("true"===e.args[0].id||"false"===e.args[0].id))},is_close_option:function(e){return pl.type.is_term(e)&&"force/1"===e.indicator&&pl.type.is_atom(e.args[0])&&("true"===e.args[0].id||"false"===e.args[0].id)},is_modifiable_flag:function(e){return pl.type.is_flag(e)&&pl.flag[e.id].changeable},is_module:function(e){return e instanceof Term&&"library/1"===e.indicator&&e.args[0]instanceof Term&&0===e.args[0].args.length&&void 0!==pl.module[e.args[0].id]}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(e){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(e){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(e){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(e){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(e,r){return e}},"-/1":{type_args:null,type_result:null,fn:function(e,r){return-e}},"\\/1":{type_args:!1,type_result:!1,fn:function(e,r){return~e}},"abs/1":{type_args:null,type_result:null,fn:function(e,r){return Math.abs(e)}},"sign/1":{type_args:null,type_result:null,fn:function(e,r){return Math.sign(e)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(e,r){return parseInt(e)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(e,r){return e-parseInt(e)}},"float/1":{type_args:null,type_result:!0,fn:function(e,r){return parseFloat(e)}},"floor/1":{type_args:!0,type_result:!1,fn:function(e,r){return Math.floor(e)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(e,r){return parseInt(e)}},"round/1":{type_args:!0,type_result:!1,fn:function(e,r){return Math.round(e)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(e,r){return Math.ceil(e)}},"sin/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.sin(e)}},"cos/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.cos(e)}},"tan/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.tan(e)}},"asin/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.asin(e)}},"acos/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.acos(e)}},"atan/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.atan(e)}},"atan2/2":{type_args:null,type_result:!0,fn:function(e,r,t){return Math.atan2(e,r)}},"exp/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.exp(e)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(e,r){return Math.sqrt(e)}},"log/1":{type_args:null,type_result:!0,fn:function(e,r){return e>0?Math.log(e):pl.error.evaluation("undefined",r.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(e,r,t){return e+r}},"-/2":{type_args:null,type_result:null,fn:function(e,r,t){return e-r}},"*/2":{type_args:null,type_result:null,fn:function(e,r,t){return e*r}},"//2":{type_args:null,type_result:!0,fn:function(e,r,t){return r?e/r:pl.error.evaluation("zero_division",t.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(e,r,t){return r?parseInt(e/r):pl.error.evaluation("zero_division",t.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(e,r,t){return Math.pow(e,r)}},"^/2":{type_args:null,type_result:null,fn:function(e,r,t){return Math.pow(e,r)}},"<</2":{type_args:!1,type_result:!1,fn:function(e,r,t){return e<<r}},">>/2":{type_args:!1,type_result:!1,fn:function(e,r,t){return e>>r}},"/\\/2":{type_args:!1,type_result:!1,fn:function(e,r,t){return e&r}},"\\//2":{type_args:!1,type_result:!1,fn:function(e,r,t){return e|r}},"xor/2":{type_args:!1,type_result:!1,fn:function(e,r,t){return e^r}},"rem/2":{type_args:!1,type_result:!1,fn:function(e,r,t){return r?e%r:pl.error.evaluation("zero_division",t.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(e,r,t){return r?e-parseInt(e/r)*r:pl.error.evaluation("zero_division",t.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(e,r,t){return Math.max(e,r)}},"min/2":{type_args:null,type_result:null,fn:function(e,r,t){return Math.min(e,r)}}}},directive:{"dynamic/1":function(e,r){var t=r.args[0];if(pl.type.is_variable(t))e.throw_error(pl.error.instantiation(r.indicator));else if(pl.type.is_compound(t)&&"//2"===t.indicator)if(pl.type.is_variable(t.args[0])||pl.type.is_variable(t.args[1]))e.throw_error(pl.error.instantiation(r.indicator));else if(pl.type.is_atom(t.args[0]))if(pl.type.is_integer(t.args[1])){var i=r.args[0].args[0].id+"/"+r.args[0].args[1].value;e.session.public_predicates[i]=!0,e.session.rules[i]||(e.session.rules[i]=[])}else e.throw_error(pl.error.type("integer",t.args[1],r.indicator));else e.throw_error(pl.error.type("atom",t.args[0],r.indicator));else e.throw_error(pl.error.type("predicate_indicator",t,r.indicator))},"multifile/1":function(e,r){var t=r.args[0];pl.type.is_variable(t)?e.throw_error(pl.error.instantiation(r.indicator)):pl.type.is_compound(t)&&"//2"===t.indicator?pl.type.is_variable(t.args[0])||pl.type.is_variable(t.args[1])?e.throw_error(pl.error.instantiation(r.indicator)):pl.type.is_atom(t.args[0])?pl.type.is_integer(t.args[1])?e.session.multifile_predicates[r.args[0].args[0].id+"/"+r.args[0].args[1].value]=!0:e.throw_error(pl.error.type("integer",t.args[1],r.indicator)):e.throw_error(pl.error.type("atom",t.args[0],r.indicator)):e.throw_error(pl.error.type("predicate_indicator",t,r.indicator))},"set_prolog_flag/2":function(e,r){var t=r.args[0],i=r.args[1];pl.type.is_variable(t)||pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(r.indicator)):pl.type.is_atom(t)?pl.type.is_flag(t)?pl.type.is_value_flag(t,i)?pl.type.is_modifiable_flag(t)?e.session.flag[t.id]=i:e.throw_error(pl.error.permission("modify","flag",t)):e.throw_error(pl.error.domain("flag_value",new Term("+",[t,i]),r.indicator)):e.throw_error(pl.error.domain("prolog_flag",t,r.indicator)):e.throw_error(pl.error.type("atom",t,r.indicator))},"use_module/1":function(e,r){var t=r.args[0];if(pl.type.is_variable(t))e.throw_error(pl.error.instantiation(r.indicator));else if(pl.type.is_term(t)){if(pl.type.is_module(t)){var i=t.args[0].id;-1===indexOf(e.session.modules,i)&&e.session.modules.push(i)}}else e.throw_error(pl.error.type("term",t,r.indicator))},"char_conversion/2":function(e,r){var t=r.args[0],i=r.args[1];pl.type.is_variable(t)||pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(r.indicator)):pl.type.is_character(t)?pl.type.is_character(i)?t.id===i.id?delete e.session.__char_conversion[t.id]:e.session.__char_conversion[t.id]=i.id:e.throw_error(pl.error.type("character",i,r.indicator)):e.throw_error(pl.error.type("character",t,r.indicator))},"op/3":function(e,r){var t=r.args[0],i=r.args[1],n=r.args[2];if(pl.type.is_variable(t)||pl.type.is_variable(i)||pl.type.is_variable(n))e.throw_error(pl.error.instantiation(r.indicator));else if(pl.type.is_integer(t))if(pl.type.is_atom(i))if(pl.type.is_atom(n))if(t.value<0||t.value>1200)e.throw_error(pl.error.domain("operator_priority",t,r.indicator));else if(","===n.id)e.throw_error(pl.error.permission("modify","operator",n,r.indicator));else if("|"===n.id&&(t.value<1001||3!==i.id.length))e.throw_error(pl.error.permission("modify","operator",n,r.indicator));else if(-1===["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(i.id))e.throw_error(pl.error.domain("operator_specifier",i,r.indicator));else{var a,o={prefix:null,infix:null,postfix:null};for(var s in e.session.__operators)if(e.session.__operators.hasOwnProperty(s)){var l=e.session.__operators[s][n.id];l&&(-1!==indexOf(l,"fx")&&(o.prefix={priority:s,type:"fx"}),-1!==indexOf(l,"fy")&&(o.prefix={priority:s,type:"fy"}),-1!==indexOf(l,"xf")&&(o.postfix={priority:s,type:"xf"}),-1!==indexOf(l,"yf")&&(o.postfix={priority:s,type:"yf"}),-1!==indexOf(l,"xfx")&&(o.infix={priority:s,type:"xfx"}),-1!==indexOf(l,"xfy")&&(o.infix={priority:s,type:"xfy"}),-1!==indexOf(l,"yfx")&&(o.infix={priority:s,type:"yfx"}))}switch(i.id){case"fy":case"fx":a="prefix";break;case"yf":case"xf":a="postfix";break;default:a="infix"}if(!((o.prefix&&"prefix"===a||o.postfix&&"postfix"===a||o.infix&&"infix"===a)&&o[a].type!==i.id||o.infix&&"postfix"===a||o.postfix&&"infix"===a)||0===t.value)return o[a]&&(remove(e.session.__operators[o[a].priority][n.id],i.id),0===e.session.__operators[o[a].priority][n.id].length&&delete e.session.__operators[o[a].priority][n.id]),t.value>0&&(e.session.__operators[t.value]||(e.session.__operators[t.value.toString()]={}),e.session.__operators[t.value][n.id]||(e.session.__operators[t.value][n.id]=[]),e.session.__operators[t.value][n.id].push(i.id)),!0;e.throw_error(pl.error.permission("create","operator",n,r.indicator))}else e.throw_error(pl.error.type("atom",n,r.indicator));else e.throw_error(pl.error.type("atom",i,r.indicator));else e.throw_error(pl.error.type("integer",t,r.indicator))}},predicate:{"goal_expansion/2":[new Rule(new Term("goal_expansion",[new Term(",",[new Var("X"),new Var("Y")]),new Term(",",[new Var("X_"),new Var("Y_")])]),new Term(";",[new Term(",",[new Term("goal_expansion",[new Var("X"),new Var("X_")]),new Term(";",[new Term("goal_expansion",[new Var("Y"),new Var("Y_")]),new Term("=",[new Var("Y_"),new Var("Y")])])]),new Term(",",[new Term("=",[new Var("X"),new Var("X_")]),new Term("goal_expansion",[new Var("Y"),new Var("Y_")])])])),new Rule(new Term("goal_expansion",[new Term(";",[new Var("X"),new Var("Y")]),new Term(";",[new Var("X_"),new Var("Y_")])]),new Term(";",[new Term(",",[new Term("goal_expansion",[new Var("X"),new Var("X_")]),new Term(";",[new Term("goal_expansion",[new Var("Y"),new Var("Y_")]),new Term("=",[new Var("Y_"),new Var("Y")])])]),new Term(",",[new Term("=",[new Var("X"),new Var("X_")]),new Term("goal_expansion",[new Var("Y"),new Var("Y_")])])])),new Rule(new Term("goal_expansion",[new Term("->",[new Var("X"),new Var("Y")]),new Term("->",[new Var("X_"),new Var("Y_")])]),new Term(";",[new Term(",",[new Term("goal_expansion",[new Var("X"),new Var("X_")]),new Term(";",[new Term("goal_expansion",[new Var("Y"),new Var("Y_")]),new Term("=",[new Var("Y_"),new Var("Y")])])]),new Term(",",[new Term("=",[new Var("X"),new Var("X_")]),new Term("goal_expansion",[new Var("Y"),new Var("Y_")])])])),new Rule(new Term("goal_expansion",[new Term("catch",[new Var("X"),new Var("Y"),new Var("Z")]),new Term("catch",[new Var("X_"),new Var("Y"),new Var("Z_")])]),new Term(";",[new Term(",",[new Term("goal_expansion",[new Var("X"),new Var("X_")]),new Term(";",[new Term("goal_expansion",[new Var("Z"),new Var("Z_")]),new Term("=",[new Var("Z_"),new Var("Z")])])]),new Term(",",[new Term("=",[new Var("X_"),new Var("X")]),new Term("goal_expansion",[new Var("Z"),new Var("Z_")])])])),new Rule(new Term("goal_expansion",[new Term("\\+",[new Var("X")]),new Term("\\+",[new Var("X_")])]),new Term(",",[new Term("nonvar",[new Var("X")]),new Term("goal_expansion",[new Var("X"),new Var("X_")])])),new Rule(new Term("goal_expansion",[new Term("once",[new Var("X")]),new Term("once",[new Var("X_")])]),new Term(",",[new Term("nonvar",[new Var("X")]),new Term("goal_expansion",[new Var("X"),new Var("X_")])])),new Rule(new Term("goal_expansion",[new Term("findall",[new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall",[new Var("X"),new Var("Y_"),new Var("Z")])]),new Term("goal_expansion",[new Var("Y"),new Var("Y_")])),new Rule(new Term("goal_expansion",[new Term("setof",[new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall",[new Var("X"),new Var("Y_"),new Var("Z")])]),new Term("goal_expansion",[new Var("Y"),new Var("Y_")])),new Rule(new Term("goal_expansion",[new Term("bagof",[new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall",[new Var("X"),new Var("Y_"),new Var("Z")])]),new Term("goal_expansion",[new Var("Y"),new Var("Y_")])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X")]),new Term("call",[new Var("X_")])]),new Term(",",[new Term("nonvar",[new Var("X")]),new Term("goal_expansion",[new Var("X"),new Var("X_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term("[]",[])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1"),new Var("A2")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term(".",[new Var("A2"),new Term("[]",[])])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1"),new Var("A2"),new Var("A3")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term(".",[new Var("A2"),new Term(".",[new Var("A3"),new Term("[]",[])])])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term(".",[new Var("A2"),new Term(".",[new Var("A3"),new Term(".",[new Var("A4"),new Term("[]",[])])])])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term(".",[new Var("A2"),new Term(".",[new Var("A3"),new Term(".",[new Var("A4"),new Term(".",[new Var("A5"),new Term("[]",[])])])])])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5"),new Var("A6")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term(".",[new Var("A2"),new Term(".",[new Var("A3"),new Term(".",[new Var("A4"),new Term(".",[new Var("A5"),new Term(".",[new Var("A6"),new Term("[]",[])])])])])])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])])),new Rule(new Term("goal_expansion",[new Term("call",[new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5"),new Var("A6"),new Var("A7")]),new Term("call",[new Var("F_")])]),new Term(",",[new Term("=..",[new Var("F"),new Term(".",[new Var("X"),new Term(".",[new Var("A1"),new Term(".",[new Var("A2"),new Term(".",[new Var("A3"),new Term(".",[new Var("A4"),new Term(".",[new Var("A5"),new Term(".",[new Var("A6"),new Term(".",[new Var("A7"),new Term("[]",[])])])])])])])])])]),new Term("goal_expansion",[new Var("F"),new Var("F_")])]))],"put_attr/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(i))if(pl.type.is_atom(n)){var o=r.substitution.set_attribute(i.id,n,a);e.prepend([new State(r.goal.replace(null),o,r)])}else e.throw_error(pl.error.type("atom",n,t.indicator));else e.throw_error(pl.error.type("variable",i,t.indicator))},"get_attr/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(i))if(pl.type.is_atom(n)){var o=r.substitution.get_attribute(i.id,n);o&&e.prepend([new State(r.goal.replace(new Term("=",[a,o])),r.substitution,r)])}else e.throw_error(pl.error.type("atom",n,t.indicator));else e.throw_error(pl.error.type("variable",i,t.indicator))},"op/3":function(e,r,t){pl.directive["op/3"](e,t)&&e.success(r)},"current_op/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2],o=[];for(var s in e.session.__operators)for(var l in e.session.__operators[s])for(var p=0;p<e.session.__operators[s][l].length;p++)o.push(new State(r.goal.replace(new Term(",",[new Term("=",[new Num(s,!1),i]),new Term(",",[new Term("=",[new Term(e.session.__operators[s][l][p],[]),n]),new Term("=",[new Term(l,[]),a])])])),r.substitution,r));e.prepend(o)},";/2":function(e,r,t){var i=t.args[0],n=t.args[1];if(pl.type.is_term(i)&&"->/2"===i.indicator){var a=i.args[0],o=i.args[1],s=n,l=r.goal.replace(new Term(",",[a,new Term(",",[new Term("!"),o])])),p=r.goal.replace(new Term(",",[new Term("!"),s]));e.prepend([new State(l,r.substitution,r),new State(p,r.substitution,r)])}else e.prepend([new State(r.goal.replace(i),r.substitution,r),new State(r.goal.replace(n),r.substitution,r)])},"!/0":function(e,r,t){var i,n,a=[];for(i=r,n=null;null!==i.parent&&i.parent.goal.search(t);)if(n=i,null!==(i=i.parent).goal){var o=i.goal.select();if(o&&"call"===o.id&&o.search(t)){i=n;break}}for(var s=e.points.length-1;s>=0;s--){for(var l=e.points[s],p=l.parent;null!==p&&p!==i.parent;)p=p.parent;null===p&&p!==i.parent&&a.push(l)}e.points=a.reverse(),e.success(r)},"\\+/1":function(e,r,t){var i=t.args[0];pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(e.level)):pl.type.is_callable(i)?e.prepend([new State(r.goal.replace(new Term(",",[new Term(",",[new Term("call",[i]),new Term("!",[])]),new Term("fail",[])])),r.substitution,r),new State(r.goal.replace(null),r.substitution,r)]):e.throw_error(pl.error.type("callable",i,e.level))},"->/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=r.goal.replace(new Term(",",[i,new Term(",",[new Term("!"),n])]));e.prepend([new State(a,r.substitution,r)])},"fail/0":function(e,r,t){},"false/0":function(e,r,t){},"true/0":function(e,r,t){e.success(r)},"call/1":callN(1),"call/2":callN(2),"call/3":callN(3),"call/4":callN(4),"call/5":callN(5),"call/6":callN(6),"call/7":callN(7),"call/8":callN(8),"once/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("call",[i]),new Term("!",[])])),r.substitution,r)])},"forall/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("\\+",[new Term(",",[new Term("call",[i]),new Term("\\+",[new Term("call",[n])])])])),r.substitution,r)])},"repeat/0":function(e,r,t){e.prepend([new State(r.goal.replace(null),r.substitution,r),r])},"throw/1":function(e,r,t){pl.type.is_variable(t.args[0])?e.throw_error(pl.error.instantiation(e.level)):e.throw_error(t.args[0])},"catch/3":function(e,r,t){var i=e.points;e.points=[],e.prepend([new State(t.args[0],r.substitution,r)]);var n=e.session.format_success,a=e.session.format_error;e.session.format_success=function(e){return e.substitution},e.session.format_error=function(e){return e.goal};e.__calls.unshift(function(o){var s=e.points;if(e.points=i,e.session.format_success=n,e.session.format_error=a,pl.type.is_error(o)){for(var l=[],p=e.points.length-1;p>=0;p--){for(var u=(c=e.points[p]).parent;null!==u&&u!==r.parent;)u=u.parent;null===u&&u!==r.parent&&l.push(c)}e.points=l;var _="true/0"===e.get_flag("occurs_check").indicator,c=new State,f=pl.unify(o.args[0],t.args[1],_);null!==f?(c.substitution=r.substitution.apply(f),c.goal=r.goal.replace(t.args[2]).apply(f),c.parent=r,e.prepend([c])):e.throw_error(o.args[0])}else if(!1!==o){var d=null===o?[]:[new State(r.goal.apply(o).replace(null),r.substitution.apply(o),r)],m=[];for(p=s.length-1;p>=0;p--){m.push(s[p]);var w=null!==s[p].goal?s[p].goal.select():null;if(pl.type.is_term(w)&&"!/0"===w.indicator)break}var g=map(m,function(e){return null===e.goal&&(e.goal=new Term("true",[])),(e=new State(r.goal.replace(new Term("catch",[e.goal,t.args[1],t.args[2]])),r.substitution.apply(e.substitution),e.parent)).exclude=t.args[0].variables(),e}).reverse();e.prepend(g),e.prepend(d),null===o&&(this.current_limit=0,e.__calls.shift()(null))}})},"=/2":function(e,r,t){var i="true/0"===e.get_flag("occurs_check").indicator,n=new State,a=pl.unify(t.args[0],t.args[1],i);null!==a&&(n.goal=r.goal.apply(a).replace(null),n.substitution=r.substitution.apply(a),n.parent=r,e.prepend([n]))},"unify_with_occurs_check/2":function(e,r,t){var i=new State,n=pl.unify(t.args[0],t.args[1],!0);null!==n&&(i.goal=r.goal.apply(n).replace(null),i.substitution=r.substitution.apply(n),i.parent=r,e.prepend([i]))},"\\=/2":function(e,r,t){var i="true/0"===e.get_flag("occurs_check").indicator;null===pl.unify(t.args[0],t.args[1],i)&&e.success(r)},"subsumes_term/2":function(e,r,t){var i="true/0"===e.get_flag("occurs_check").indicator,n=pl.unify(t.args[1],t.args[0],i);null!==n&&t.args[1].apply(n).equals(t.args[1])&&e.success(r)},"findall/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(n))if(pl.type.is_variable(a)||pl.type.is_list(a)){var o=e.next_free_variable(),s=new Term(",",[n,new Term("=",[o,i])]),l=e.points,p=e.session.limit,u=e.session.format_success;e.session.format_success=function(e){return e.substitution},e.add_goal(s,!0,r);var _=[],c=function(t){if(!1===t||null===t||pl.type.is_error(t)){if(e.points=l,e.session.limit=p,e.session.format_success=u,pl.type.is_error(t))e.throw_error(t.args[0]);else if(e.current_limit>0){for(var i=new Term("[]"),n=_.length-1;n>=0;n--)i=new Term(".",[_[n],i]);e.prepend([new State(r.goal.replace(new Term("=",[a,i])),r.substitution,r)])}}else e.__calls.unshift(c),_.push(t.links[o.id]),e.session.limit=e.current_limit};e.__calls.unshift(c)}else e.throw_error(pl.error.type("list",a,t.indicator));else e.throw_error(pl.error.type("callable",n,t.indicator))},"bagof/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(n))if(pl.type.is_variable(a)||pl.type.is_list(a)){var o,s=e.next_free_variable();"^/2"===n.indicator?(o=n.args[0].variables(),n=n.args[1]):o=[],o=o.concat(i.variables());for(var l=n.variables().filter(function(e){return-1===indexOf(o,e)}),p=new Term("[]"),u=l.length-1;u>=0;u--)p=new Term(".",[new Var(l[u]),p]);var _=new Term(",",[n,new Term("=",[s,new Term(",",[p,i])])]),c=e.points,f=e.session.limit,d=e.session.format_success;e.session.format_success=function(e){return e.substitution},e.add_goal(_,!0,r);var m=[],w=function(t){if(!1===t||null===t||pl.type.is_error(t)){if(e.points=c,e.session.limit=f,e.session.format_success=d,pl.type.is_error(t))e.throw_error(t.args[0]);else if(e.current_limit>0){for(var i=[],n=0;n<m.length;n++){t=m[n].answers;for(var o=new Term("[]"),l=t.length-1;l>=0;l--)o=new Term(".",[t[l],o]);i.push(new State(r.goal.replace(new Term(",",[new Term("=",[p,m[n].variables]),new Term("=",[a,o])])),r.substitution,r))}e.prepend(i)}}else{e.__calls.unshift(w);var u=!1,_=t.links[s.id].args[0],g=t.links[s.id].args[1];for(var y in m)if(m.hasOwnProperty(y)){var h=m[y];if(h.variables.equals(_)){h.answers.push(g),u=!0;break}}u||m.push({variables:_,answers:[g]}),e.session.limit=e.current_limit}};e.__calls.unshift(w)}else e.throw_error(pl.error.type("list",a,t.indicator));else e.throw_error(pl.error.type("callable",n,t.indicator))},"setof/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(n))if(pl.type.is_variable(a)||pl.type.is_list(a)){var o,s=e.next_free_variable();"^/2"===n.indicator?(o=n.args[0].variables(),n=n.args[1]):o=[],o=o.concat(i.variables());for(var l=n.variables().filter(function(e){return-1===indexOf(o,e)}),p=new Term("[]"),u=l.length-1;u>=0;u--)p=new Term(".",[new Var(l[u]),p]);var _=new Term(",",[n,new Term("=",[s,new Term(",",[p,i])])]),c=e.points,f=e.session.limit,d=e.session.format_success;e.session.format_success=function(e){return e.substitution},e.add_goal(_,!0,r);var m=[],w=function(t){if(!1===t||null===t||pl.type.is_error(t)){if(e.points=c,e.session.limit=f,e.session.format_success=d,pl.type.is_error(t))e.throw_error(t.args[0]);else if(e.current_limit>0){for(var i=[],n=0;n<m.length;n++){for(n=(t=m[n].answers.sort(pl.compare)).length-1;n>0;n--)t[n].equals(t[n-1])&&t.splice(n,1);for(var o=new Term("[]"),l=t.length-1;l>=0;l--)o=new Term(".",[t[l],o]);i.push(new State(r.goal.replace(new Term(",",[new Term("=",[p,m[n].variables]),new Term("=",[a,o])])),r.substitution,r))}e.prepend(i)}}else{e.__calls.unshift(w);var u=!1,_=t.links[s.id].args[0],g=t.links[s.id].args[1];for(var y in m)if(m.hasOwnProperty(y)){var h=m[y];if(h.variables.equals(_)){h.answers.push(g),u=!0;break}}u||m.push({variables:_,answers:[g]}),e.session.limit=e.current_limit}};e.__calls.unshift(w)}else e.throw_error(pl.error.type("list",a,t.indicator));else e.throw_error(pl.error.type("callable",n,t.indicator))},"functor/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(i)&&(pl.type.is_variable(n)||pl.type.is_variable(a)))e.throw_error(pl.error.instantiation("functor/3"));else if(pl.type.is_variable(a)||pl.type.is_integer(a))if(pl.type.is_variable(n)||pl.type.is_atomic(n))if(pl.type.is_integer(n)&&pl.type.is_integer(a)&&0!==a.value)e.throw_error(pl.error.type("atom",t.args[1],"functor/3"));else if(pl.type.is_variable(i)){if(t.args[2].value>=0){for(var o=[],s=0;s<a.value;s++)o.push(e.next_free_variable());var l=pl.type.is_integer(n)?n:new Term(n.id,o);e.prepend([new State(r.goal.replace(new Term("=",[i,l])),r.substitution,r)])}}else{var p=pl.type.is_integer(i)?i:new Term(i.id,[]),u=pl.type.is_integer(i)?new Num(0,!1):new Num(i.args.length,!1),_=new Term(",",[new Term("=",[p,n]),new Term("=",[u,a])]);e.prepend([new State(r.goal.replace(_),r.substitution,r)])}else e.throw_error(pl.error.type("atomic",t.args[1],"functor/3"));else e.throw_error(pl.error.type("integer",t.args[2],"functor/3"))},"arg/3":function(e,r,t){if(pl.type.is_variable(t.args[0])||pl.type.is_variable(t.args[1]))e.throw_error(pl.error.instantiation(t.indicator));else if(t.args[0].value<0)e.throw_error(pl.error.domain("not_less_than_zero",t.args[0],t.indicator));else if(pl.type.is_compound(t.args[1])){var i=t.args[0].value;if(i>0&&i<=t.args[1].args.length){var n=new Term("=",[t.args[1].args[i-1],t.args[2]]);e.prepend([new State(r.goal.replace(n),r.substitution,r)])}}else e.throw_error(pl.error.type("compound",t.args[1],t.indicator))},"=../2":function(e,r,t){var i;if(pl.type.is_variable(t.args[0])&&(pl.type.is_variable(t.args[1])||pl.type.is_non_empty_list(t.args[1])&&pl.type.is_variable(t.args[1].args[0])))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_fully_list(t.args[1]))if(pl.type.is_variable(t.args[0])){if(!pl.type.is_variable(t.args[1])){var n=[];for(i=t.args[1].args[1];"./2"===i.indicator;)n.push(i.args[0]),i=i.args[1];pl.type.is_variable(t.args[0])&&pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):0===n.length&&pl.type.is_compound(t.args[1].args[0])?e.throw_error(pl.error.type("atomic",t.args[1].args[0],t.indicator)):n.length>0&&(pl.type.is_compound(t.args[1].args[0])||pl.type.is_number(t.args[1].args[0]))?e.throw_error(pl.error.type("atom",t.args[1].args[0],t.indicator)):0===n.length?e.prepend([new State(r.goal.replace(new Term("=",[t.args[1].args[0],t.args[0]],r)),r.substitution,r)]):e.prepend([new State(r.goal.replace(new Term("=",[new Term(t.args[1].args[0].id,n),t.args[0]])),r.substitution,r)])}}else{if(pl.type.is_atomic(t.args[0]))i=new Term(".",[t.args[0],new Term("[]")]);else{i=new Term("[]");for(var a=t.args[0].args.length-1;a>=0;a--)i=new Term(".",[t.args[0].args[a],i]);i=new Term(".",[new Term(t.args[0].id),i])}e.prepend([new State(r.goal.replace(new Term("=",[i,t.args[1]])),r.substitution,r)])}else e.throw_error(pl.error.type("list",t.args[1],t.indicator))},"copy_term/2":function(e,r,t){var i=t.args[0].rename(e);e.prepend([new State(r.goal.replace(new Term("=",[i,t.args[1]])),r.substitution,r.parent)])},"term_variables/2":function(e,r,t){var i=t.args[0],n=t.args[1];if(pl.type.is_fully_list(n)){var a=arrayToList(map(nub(i.variables()),function(e){return new Var(e)}));e.prepend([new State(r.goal.replace(new Term("=",[n,a])),r.substitution,r)])}else e.throw_error(pl.error.type("list",n,t.indicator))},"clause/2":function(e,r,t){if(pl.type.is_variable(t.args[0]))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(t.args[0]))if(pl.type.is_variable(t.args[1])||pl.type.is_callable(t.args[1])){if(void 0!==e.session.rules[t.args[0].indicator])if(e.is_public_predicate(t.args[0].indicator)){var i=[];for(var n in e.session.rules[t.args[0].indicator])if(e.session.rules[t.args[0].indicator].hasOwnProperty(n)){var a=e.session.rules[t.args[0].indicator][n];e.session.renamed_variables={},null===(a=a.rename(e)).body&&(a.body=new Term("true"));var o=new Term(",",[new Term("=",[a.head,t.args[0]]),new Term("=",[a.body,t.args[1]])]);i.push(new State(r.goal.replace(o),r.substitution,r))}e.prepend(i)}else e.throw_error(pl.error.permission("access","private_procedure",t.args[0].indicator,t.indicator))}else e.throw_error(pl.error.type("callable",t.args[1],t.indicator));else e.throw_error(pl.error.type("callable",t.args[0],t.indicator))},"current_predicate/1":function(e,r,t){var i=t.args[0];if(pl.type.is_variable(i)||pl.type.is_compound(i)&&"//2"===i.indicator)if(pl.type.is_variable(i)||pl.type.is_variable(i.args[0])||pl.type.is_atom(i.args[0]))if(pl.type.is_variable(i)||pl.type.is_variable(i.args[1])||pl.type.is_integer(i.args[1])){var n=[];for(var a in e.session.rules)if(e.session.rules.hasOwnProperty(a)){var o=a.lastIndexOf("/"),s=a.substr(0,o),l=parseInt(a.substr(o+1,a.length-(o+1))),p=new Term("/",[new Term(s),new Num(l,!1)]),u=new Term("=",[p,i]);n.push(new State(r.goal.replace(u),r.substitution,r))}e.prepend(n)}else e.throw_error(pl.error.type("integer",i.args[1],t.indicator));else e.throw_error(pl.error.type("atom",i.args[0],t.indicator));else e.throw_error(pl.error.type("predicate_indicator",i,t.indicator))},"asserta/1":function(e,r,t){if(pl.type.is_variable(t.args[0]))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(t.args[0])){var i,n;":-/2"===t.args[0].indicator?(i=t.args[0].args[0],n=body_conversion(t.args[0].args[1])):(i=t.args[0],n=null),pl.type.is_callable(i)?null===n||pl.type.is_callable(n)?e.is_public_predicate(i.indicator)?(void 0===e.session.rules[i.indicator]&&(e.session.rules[i.indicator]=[]),e.session.public_predicates[i.indicator]=!0,e.session.rules[i.indicator]=[new Rule(i,n,!0)].concat(e.session.rules[i.indicator]),e.success(r)):e.throw_error(pl.error.permission("modify","static_procedure",i.indicator,t.indicator)):e.throw_error(pl.error.type("callable",n,t.indicator)):e.throw_error(pl.error.type("callable",i,t.indicator))}else e.throw_error(pl.error.type("callable",t.args[0],t.indicator))},"assertz/1":function(e,r,t){if(pl.type.is_variable(t.args[0]))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(t.args[0])){var i,n;":-/2"===t.args[0].indicator?(i=t.args[0].args[0],n=body_conversion(t.args[0].args[1])):(i=t.args[0],n=null),pl.type.is_callable(i)?null===n||pl.type.is_callable(n)?e.is_public_predicate(i.indicator)?(void 0===e.session.rules[i.indicator]&&(e.session.rules[i.indicator]=[]),e.session.public_predicates[i.indicator]=!0,e.session.rules[i.indicator].push(new Rule(i,n,!0)),e.success(r)):e.throw_error(pl.error.permission("modify","static_procedure",i.indicator,t.indicator)):e.throw_error(pl.error.type("callable",n,t.indicator)):e.throw_error(pl.error.type("callable",i,t.indicator))}else e.throw_error(pl.error.type("callable",t.args[0],t.indicator))},"retract/1":function(e,r,t){if(pl.type.is_variable(t.args[0]))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(t.args[0])){var i,n;if(":-/2"===t.args[0].indicator?(i=t.args[0].args[0],n=t.args[0].args[1]):(i=t.args[0],n=new Term("true")),void 0===r.retract)if(e.is_public_predicate(i.indicator)){if(void 0!==e.session.rules[i.indicator]){for(var a=[],o=0;o<e.session.rules[i.indicator].length;o++){e.session.renamed_variables={};var s=e.session.rules[i.indicator][o],l=s.rename(e);null===l.body&&(l.body=new Term("true",[]));var p="true/0"===e.get_flag("occurs_check").indicator;if(null!==pl.unify(new Term(",",[i,n]),new Term(",",[l.head,l.body]),p)){var u=new State(r.goal.replace(new Term(",",[new Term("retract",[new Term(":-",[i,n])]),new Term(",",[new Term("=",[i,l.head]),new Term("=",[n,l.body])])])),r.substitution,r);u.retract=s,a.push(u)}}e.prepend(a)}}else e.throw_error(pl.error.permission("modify","static_procedure",i.indicator,t.indicator));else retract(e,r,i.indicator,r.retract)}else e.throw_error(pl.error.type("callable",t.args[0],t.indicator))},"retractall/1":function(e,r,t){var i=t.args[0];pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_callable(i)?e.prepend([new State(r.goal.replace(new Term(",",[new Term("retract",[new pl.type.Term(":-",[i,new Var("_")])]),new Term("fail",[])])),r.substitution,r),new State(r.goal.replace(null),r.substitution,r)]):e.throw_error(pl.error.type("callable",i,t.indicator))},"abolish/1":function(e,r,t){if(pl.type.is_variable(t.args[0])||pl.type.is_term(t.args[0])&&"//2"===t.args[0].indicator&&(pl.type.is_variable(t.args[0].args[0])||pl.type.is_variable(t.args[0].args[1])))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_term(t.args[0])&&"//2"===t.args[0].indicator)if(pl.type.is_atom(t.args[0].args[0]))if(pl.type.is_integer(t.args[0].args[1]))if(t.args[0].args[1].value<0)e.throw_error(pl.error.domain("not_less_than_zero",t.args[0].args[1],t.indicator));else if(pl.type.is_number(e.get_flag("max_arity"))&&t.args[0].args[1].value>e.get_flag("max_arity").value)e.throw_error(pl.error.representation("max_arity",t.indicator));else{var i=t.args[0].args[0].id+"/"+t.args[0].args[1].value;e.is_public_predicate(i)?(delete e.session.rules[i],e.success(r)):e.throw_error(pl.error.permission("modify","static_procedure",i,t.indicator))}else e.throw_error(pl.error.type("integer",t.args[0].args[1],t.indicator));else e.throw_error(pl.error.type("atom",t.args[0].args[0],t.indicator));else e.throw_error(pl.error.type("predicate_indicator",t.args[0],t.indicator))},"atom_length/2":function(e,r,t){if(pl.type.is_variable(t.args[0]))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_atom(t.args[0]))if(pl.type.is_variable(t.args[1])||pl.type.is_integer(t.args[1]))if(pl.type.is_integer(t.args[1])&&t.args[1].value<0)e.throw_error(pl.error.domain("not_less_than_zero",t.args[1],t.indicator));else{var i=new Num(stringLength(t.args[0].id),!1);e.prepend([new State(r.goal.replace(new Term("=",[i,t.args[1]])),r.substitution,r)])}else e.throw_error(pl.error.type("integer",t.args[1],t.indicator));else e.throw_error(pl.error.type("atom",t.args[0],t.indicator))},"atom_concat/3":function(e,r,t){var i,n,a=t.args[0],o=t.args[1],s=t.args[2];if(pl.type.is_variable(s)&&(pl.type.is_variable(a)||pl.type.is_variable(o)))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(a)||pl.type.is_atom(a))if(pl.type.is_variable(o)||pl.type.is_atom(o))if(pl.type.is_variable(s)||pl.type.is_atom(s)){var l=pl.type.is_variable(a),p=pl.type.is_variable(o);if(l||p)if(l&&!p)(i=s.id.substr(0,s.id.length-o.id.length))+o.id===s.id&&(n=new Term("=",[a,new Term(i)]),e.prepend([new State(r.goal.replace(n),r.substitution,r)]));else if(p&&!l)i=s.id.substr(a.id.length),a.id+i===s.id&&(n=new Term("=",[o,new Term(i)]),e.prepend([new State(r.goal.replace(n),r.substitution,r)]));else{for(var u=[],_=0;_<=s.id.length;_++){var c=new Term(s.id.substr(0,_)),f=new Term(s.id.substr(_));n=new Term(",",[new Term("=",[c,a]),new Term("=",[f,o])]),u.push(new State(r.goal.replace(n),r.substitution,r))}e.prepend(u)}else n=new Term("=",[s,new Term(a.id+o.id)]),e.prepend([new State(r.goal.replace(n),r.substitution,r)])}else e.throw_error(pl.error.type("atom",s,t.indicator));else e.throw_error(pl.error.type("atom",o,t.indicator));else e.throw_error(pl.error.type("atom",a,t.indicator))},"sub_atom/5":function(e,r,t){var i,n=t.args[0],a=t.args[1],o=t.args[2],s=t.args[3],l=t.args[4];if(pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(a)||pl.type.is_integer(a))if(pl.type.is_variable(o)||pl.type.is_integer(o))if(pl.type.is_variable(s)||pl.type.is_integer(s))if(pl.type.is_integer(a)&&a.value<0)e.throw_error(pl.error.domain("not_less_than_zero",a,t.indicator));else if(pl.type.is_integer(o)&&o.value<0)e.throw_error(pl.error.domain("not_less_than_zero",o,t.indicator));else if(pl.type.is_integer(s)&&s.value<0)e.throw_error(pl.error.domain("not_less_than_zero",s,t.indicator));else{var p=[],u=[],_=[];if(pl.type.is_variable(a))for(i=0;i<=n.id.length;i++)p.push(i);else p.push(a.value);if(pl.type.is_variable(o))for(i=0;i<=n.id.length;i++)u.push(i);else u.push(o.value);if(pl.type.is_variable(s))for(i=0;i<=n.id.length;i++)_.push(i);else _.push(s.value);var c=[];for(var f in p)if(p.hasOwnProperty(f))for(var d in i=p[f],u)if(u.hasOwnProperty(d)){var m=u[d],w=n.id.length-i-m;if(-1!==indexOf(_,w)&&i+m+w===n.id.length){var g=n.id.substr(i,m);if(n.id===n.id.substr(0,i)+g+n.id.substr(i+m,w)){var y=new Term("=",[new Term(g),l]),h=new Term("=",[a,new Num(i)]),v=new Term("=",[o,new Num(m)]),b=new Term("=",[s,new Num(w)]),T=new Term(",",[new Term(",",[new Term(",",[h,v]),b]),y]);c.push(new State(r.goal.replace(T),r.substitution,r))}}}e.prepend(c)}else e.throw_error(pl.error.type("integer",s,t.indicator));else e.throw_error(pl.error.type("integer",o,t.indicator));else e.throw_error(pl.error.type("integer",a,t.indicator))},"atom_chars/2":function(e,r,t){var i=t.args[0],n=t.args[1];if(pl.type.is_variable(i)&&pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(i)||pl.type.is_atom(i))if(pl.type.is_variable(i)){for(var a=n,o=pl.type.is_variable(i),s="";"./2"===a.indicator;){if(pl.type.is_character(a.args[0]))s+=a.args[0].id;else{if(pl.type.is_variable(a.args[0])&&o)return void e.throw_error(pl.error.instantiation(t.indicator));if(!pl.type.is_variable(a.args[0]))return void e.throw_error(pl.error.type("character",a.args[0],t.indicator))}a=a.args[1]}pl.type.is_variable(a)&&o?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_empty_list(a)||pl.type.is_variable(a)?e.prepend([new State(r.goal.replace(new Term("=",[new Term(s),i])),r.substitution,r)]):e.throw_error(pl.error.type("list",n,t.indicator))}else{for(var l=new Term("[]"),p=stringLength(i.id)-1;p>=0;p--)l=new Term(".",[new Term(i.id.charAt(p)),l]);e.prepend([new State(r.goal.replace(new Term("=",[n,l])),r.substitution,r)])}else e.throw_error(pl.error.type("atom",i,t.indicator))},"atom_codes/2":function(e,r,t){var i=t.args[0],n=t.args[1];if(pl.type.is_variable(i)&&pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(i)||pl.type.is_atom(i))if(pl.type.is_variable(i)){for(var a=n,o=pl.type.is_variable(i),s="";"./2"===a.indicator;){if(pl.type.is_character_code(a.args[0]))s+=fromCodePoint(a.args[0].value);else{if(pl.type.is_variable(a.args[0])&&o)return void e.throw_error(pl.error.instantiation(t.indicator));if(!pl.type.is_variable(a.args[0]))return void e.throw_error(pl.error.representation("character_code",t.indicator))}a=a.args[1]}pl.type.is_variable(a)&&o?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_empty_list(a)||pl.type.is_variable(a)?e.prepend([new State(r.goal.replace(new Term("=",[new Term(s),i])),r.substitution,r)]):e.throw_error(pl.error.type("list",n,t.indicator))}else{for(var l=new Term("[]"),p=stringLength(i.id)-1;p>=0;p--)l=new Term(".",[new Num(codePointAt(i.id,p),!1),l]);e.prepend([new State(r.goal.replace(new Term("=",[n,l])),r.substitution,r)])}else e.throw_error(pl.error.type("atom",i,t.indicator))},"char_code/2":function(e,r,t){var i=t.args[0],n=t.args[1];if(pl.type.is_variable(i)&&pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(i)||pl.type.is_character(i))if(pl.type.is_variable(n)||pl.type.is_integer(n))if(pl.type.is_variable(n)||pl.type.is_character_code(n))if(pl.type.is_variable(n)){var a=new Num(codePointAt(i.id,0),!1);e.prepend([new State(r.goal.replace(new Term("=",[a,n])),r.substitution,r)])}else{var o=new Term(fromCodePoint(n.value));e.prepend([new State(r.goal.replace(new Term("=",[o,i])),r.substitution,r)])}else e.throw_error(pl.error.representation("character_code",t.indicator));else e.throw_error(pl.error.type("integer",n,t.indicator));else e.throw_error(pl.error.type("character",i,t.indicator))},"number_chars/2":function(e,r,t){var i,n=t.args[0],a=t.args[1];if(pl.type.is_variable(n)&&pl.type.is_variable(a))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_number(n))if(pl.type.is_variable(a)||pl.type.is_list(a)){var o=pl.type.is_variable(n);if(!pl.type.is_variable(a)){var s=a,l=!0;for(i="";"./2"===s.indicator;){if(pl.type.is_character(s.args[0]))i+=s.args[0].id;else if(pl.type.is_variable(s.args[0]))l=!1;else if(!pl.type.is_variable(s.args[0]))return void e.throw_error(pl.error.type("character",s.args[0],t.indicator));s=s.args[1]}if(l=l&&pl.type.is_empty_list(s),!pl.type.is_empty_list(s)&&!pl.type.is_variable(s))return void e.throw_error(pl.error.type("list",a,t.indicator));if(!l&&o)return void e.throw_error(pl.error.instantiation(t.indicator));if(l){if(pl.type.is_variable(s)&&o)return void e.throw_error(pl.error.instantiation(t.indicator));var p=e.parse(i),u=p.value;return void(!pl.type.is_number(u)||p.tokens[p.tokens.length-1].space?e.throw_error(pl.error.syntax_by_predicate("parseable_number",t.indicator)):e.prepend([new State(r.goal.replace(new Term("=",[n,u])),r.substitution,r)]))}}if(!o){i=n.toString();for(var _=new Term("[]"),c=i.length-1;c>=0;c--)_=new Term(".",[new Term(i.charAt(c)),_]);e.prepend([new State(r.goal.replace(new Term("=",[a,_])),r.substitution,r)])}}else e.throw_error(pl.error.type("list",a,t.indicator));else e.throw_error(pl.error.type("number",n,t.indicator))},"number_codes/2":function(e,r,t){var i,n=t.args[0],a=t.args[1];if(pl.type.is_variable(n)&&pl.type.is_variable(a))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_number(n))if(pl.type.is_variable(a)||pl.type.is_list(a)){var o=pl.type.is_variable(n);if(!pl.type.is_variable(a)){var s=a,l=!0;for(i="";"./2"===s.indicator;){if(pl.type.is_character_code(s.args[0]))i+=fromCodePoint(s.args[0].value);else if(pl.type.is_variable(s.args[0]))l=!1;else if(!pl.type.is_variable(s.args[0]))return void e.throw_error(pl.error.type("character_code",s.args[0],t.indicator));s=s.args[1]}if(l=l&&pl.type.is_empty_list(s),!pl.type.is_empty_list(s)&&!pl.type.is_variable(s))return void e.throw_error(pl.error.type("list",a,t.indicator));if(!l&&o)return void e.throw_error(pl.error.instantiation(t.indicator));if(l){if(pl.type.is_variable(s)&&o)return void e.throw_error(pl.error.instantiation(t.indicator));var p=e.parse(i),u=p.value;return void(!pl.type.is_number(u)||p.tokens[p.tokens.length-1].space?e.throw_error(pl.error.syntax_by_predicate("parseable_number",t.indicator)):e.prepend([new State(r.goal.replace(new Term("=",[n,u])),r.substitution,r)]))}}if(!o){i=n.toString();for(var _=new Term("[]"),c=i.length-1;c>=0;c--)_=new Term(".",[new Num(codePointAt(i,c),!1),_]);e.prepend([new State(r.goal.replace(new Term("=",[a,_])),r.substitution,r)])}}else e.throw_error(pl.error.type("list",a,t.indicator));else e.throw_error(pl.error.type("number",n,t.indicator))},"upcase_atom/2":function(e,r,t){var i=t.args[0],n=t.args[1];pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_atom(i)?pl.type.is_variable(n)||pl.type.is_atom(n)?e.prepend([new State(r.goal.replace(new Term("=",[n,new Term(i.id.toUpperCase(),[])])),r.substitution,r)]):e.throw_error(pl.error.type("atom",n,t.indicator)):e.throw_error(pl.error.type("atom",i,t.indicator))},"downcase_atom/2":function(e,r,t){var i=t.args[0],n=t.args[1];pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_atom(i)?pl.type.is_variable(n)||pl.type.is_atom(n)?e.prepend([new State(r.goal.replace(new Term("=",[n,new Term(i.id.toLowerCase(),[])])),r.substitution,r)]):e.throw_error(pl.error.type("atom",n,t.indicator)):e.throw_error(pl.error.type("atom",i,t.indicator))},"atomic_list_concat/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("atomic_list_concat",[i,new Term("",[]),n])),r.substitution,r)])},"atomic_list_concat/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(n)||pl.type.is_variable(i)&&pl.type.is_variable(a))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(i)||pl.type.is_list(i))if(pl.type.is_variable(a)||pl.type.is_atom(a))if(pl.type.is_variable(a)){for(var o="",s=i;pl.type.is_term(s)&&"./2"===s.indicator;){if(!pl.type.is_atom(s.args[0])&&!pl.type.is_number(s.args[0]))return void e.throw_error(pl.error.type("atomic",s.args[0],t.indicator));""!==o&&(o+=n.id),pl.type.is_atom(s.args[0])?o+=s.args[0].id:o+=""+s.args[0].value,s=s.args[1]}o=new Term(o,[]),pl.type.is_variable(s)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_term(s)&&"[]/0"===s.indicator?e.prepend([new State(r.goal.replace(new Term("=",[o,a])),r.substitution,r)]):e.throw_error(pl.error.type("list",i,t.indicator))}else{var l=arrayToList(map(a.id.split(n.id),function(e){return new Term(e,[])}));e.prepend([new State(r.goal.replace(new Term("=",[l,i])),r.substitution,r)])}else e.throw_error(pl.error.type("atom",a,t.indicator));else e.throw_error(pl.error.type("list",i,t.indicator))},"@=</2":function(e,r,t){pl.compare(t.args[0],t.args[1])<=0&&e.success(r)},"==/2":function(e,r,t){0===pl.compare(t.args[0],t.args[1])&&e.success(r)},"\\==/2":function(e,r,t){0!==pl.compare(t.args[0],t.args[1])&&e.success(r)},"@</2":function(e,r,t){pl.compare(t.args[0],t.args[1])<0&&e.success(r)},"@>/2":function(e,r,t){pl.compare(t.args[0],t.args[1])>0&&e.success(r)},"@>=/2":function(e,r,t){pl.compare(t.args[0],t.args[1])>=0&&e.success(r)},"compare/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(i)||pl.type.is_atom(i))if(pl.type.is_atom(i)&&-1===["<",">","="].indexOf(i.id))e.throw_error(pl.type.domain("order",i,t.indicator));else{var o=pl.compare(n,a);o=0===o?"=":-1===o?"<":">",e.prepend([new State(r.goal.replace(new Term("=",[i,new Term(o,[])])),r.substitution,r)])}else e.throw_error(pl.error.type("atom",i,t.indicator))},"is/2":function(e,r,t){var i=t.args[1].interpret(e);pl.type.is_number(i)?e.prepend([new State(r.goal.replace(new Term("=",[t.args[0],i],e.level)),r.substitution,r)]):e.throw_error(i)},"between/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(i)||pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_integer(i))if(pl.type.is_integer(n))if(pl.type.is_variable(a)||pl.type.is_integer(a))if(pl.type.is_variable(a)){var o=[new State(r.goal.replace(new Term("=",[a,i])),r.substitution,r)];i.value<n.value&&o.push(new State(r.goal.replace(new Term("between",[new Num(i.value+1,!1),n,a])),r.substitution,r)),e.prepend(o)}else i.value<=a.value&&n.value>=a.value&&e.success(r);else e.throw_error(pl.error.type("integer",a,t.indicator));else e.throw_error(pl.error.type("integer",n,t.indicator));else e.throw_error(pl.error.type("integer",i,t.indicator))},"succ/2":function(e,r,t){var i=t.args[0],n=t.args[1];pl.type.is_variable(i)&&pl.type.is_variable(n)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_variable(i)||pl.type.is_integer(i)?pl.type.is_variable(n)||pl.type.is_integer(n)?!pl.type.is_variable(i)&&i.value<0?e.throw_error(pl.error.domain("not_less_than_zero",i,t.indicator)):!pl.type.is_variable(n)&&n.value<0?e.throw_error(pl.error.domain("not_less_than_zero",n,t.indicator)):(pl.type.is_variable(n)||n.value>0)&&(pl.type.is_variable(i)?e.prepend([new State(r.goal.replace(new Term("=",[i,new Num(n.value-1,!1)])),r.substitution,r)]):e.prepend([new State(r.goal.replace(new Term("=",[n,new Num(i.value+1,!1)])),r.substitution,r)])):e.throw_error(pl.error.type("integer",n,t.indicator)):e.throw_error(pl.error.type("integer",i,t.indicator))},"=:=/2":function(e,r,t){var i=pl.arithmetic_compare(e,t.args[0],t.args[1]);pl.type.is_term(i)?e.throw_error(i):0===i&&e.success(r)},"=\\=/2":function(e,r,t){var i=pl.arithmetic_compare(e,t.args[0],t.args[1]);pl.type.is_term(i)?e.throw_error(i):0!==i&&e.success(r)},"</2":function(e,r,t){var i=pl.arithmetic_compare(e,t.args[0],t.args[1]);pl.type.is_term(i)?e.throw_error(i):i<0&&e.success(r)},"=</2":function(e,r,t){var i=pl.arithmetic_compare(e,t.args[0],t.args[1]);pl.type.is_term(i)?e.throw_error(i):i<=0&&e.success(r)},">/2":function(e,r,t){var i=pl.arithmetic_compare(e,t.args[0],t.args[1]);pl.type.is_term(i)?e.throw_error(i):i>0&&e.success(r)},">=/2":function(e,r,t){var i=pl.arithmetic_compare(e,t.args[0],t.args[1]);pl.type.is_term(i)?e.throw_error(i):i>=0&&e.success(r)},"var/1":function(e,r,t){pl.type.is_variable(t.args[0])&&e.success(r)},"atom/1":function(e,r,t){pl.type.is_atom(t.args[0])&&e.success(r)},"atomic/1":function(e,r,t){pl.type.is_atomic(t.args[0])&&e.success(r)},"compound/1":function(e,r,t){pl.type.is_compound(t.args[0])&&e.success(r)},"integer/1":function(e,r,t){pl.type.is_integer(t.args[0])&&e.success(r)},"float/1":function(e,r,t){pl.type.is_float(t.args[0])&&e.success(r)},"number/1":function(e,r,t){pl.type.is_number(t.args[0])&&e.success(r)},"nonvar/1":function(e,r,t){pl.type.is_variable(t.args[0])||e.success(r)},"ground/1":function(e,r,t){0===t.variables().length&&e.success(r)},"acyclic_term/1":function(e,r,t){for(var i=r.substitution.apply(r.substitution),n=t.args[0].variables(),a=0;a<n.length;a++)if(void 0!==r.substitution.links[n[a]]&&!r.substitution.links[n[a]].equals(i.links[n[a]]))return;e.success(r)},"callable/1":function(e,r,t){pl.type.is_callable(t.args[0])&&e.success(r)},"is_list/1":function(e,r,t){for(var i=t.args[0];pl.type.is_term(i)&&"./2"===i.indicator;)i=i.args[1];pl.type.is_term(i)&&"[]/0"===i.indicator&&e.success(r)},"current_input/1":function(e,r,t){var i=t.args[0];pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?(pl.type.is_atom(i)&&e.get_stream_by_alias(i.id)&&(i=e.get_stream_by_alias(i.id)),e.prepend([new State(r.goal.replace(new Term("=",[i,e.get_current_input()])),r.substitution,r)])):e.throw_error(pl.error.domain("stream",i,t.indicator))},"current_output/1":function(e,r,t){var i=t.args[0];pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?(pl.type.is_atom(i)&&e.get_stream_by_alias(i.id)&&(i=e.get_stream_by_alias(i.id)),e.prepend([new State(r.goal.replace(new Term("=",[i,e.get_current_output()])),r.substitution,r)])):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator))},"set_input/1":function(e,r,t){var i=t.args[0],n=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(n)?!0===n.output?e.throw_error(pl.error.permission("input","stream",i,t.indicator)):(e.set_current_input(n),e.success(r)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator))},"set_output/1":function(e,r,t){var i=t.args[0],n=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(n)?!0===n.input?e.throw_error(pl.error.permission("output","stream",i,t.indicator)):(e.set_current_output(n),e.success(r)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator))},"open/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];e.prepend([new State(r.goal.replace(new Term("open",[i,n,a,new Term("[]",[])])),r.substitution,r)])},"open/4":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2],o=t.args[3];if(pl.type.is_variable(i)||pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_atom(n))if(pl.type.is_list(o))if(pl.type.is_variable(a))if(pl.type.is_atom(i)||pl.type.is_streamable(i))if(pl.type.is_io_mode(n)){for(var s,l={},p=o;pl.type.is_term(p)&&"./2"===p.indicator;){if(s=p.args[0],pl.type.is_variable(s))return void e.throw_error(pl.error.instantiation(t.indicator));if(!pl.type.is_stream_option(s))return void e.throw_error(pl.error.domain("stream_option",s,t.indicator));l[s.id]=s.args[0].id,p=p.args[1]}if("[]/0"!==p.indicator)return void(pl.type.is_variable(p)?e.throw_error(pl.error.instantiation(t.indicator)):e.throw_error(pl.error.type("list",o,t.indicator)));var u,_=l.alias;if(_&&e.get_stream_by_alias(_))return void e.throw_error(pl.error.permission("open","source_sink",new Term("alias",[new Term(_,[])]),t.indicator));if(l.type||(l.type="text"),!1===(u=pl.type.is_atom(i)?e.file_system_open(i.id,l.type,n.id):i.stream(l.type,n.id)))return void e.throw_error(pl.error.permission("open","source_sink",i,t.indicator));if(null===u)return void e.throw_error(pl.error.existence("source_sink",i,t.indicator));var c=new Stream(u,n.id,l.alias,l.type,"true"===l.reposition,l.eof_action);_?e.session.streams[_]=c:e.session.streams[c.id]=c,e.prepend([new State(r.goal.replace(new Term("=",[a,c])),r.substitution,r)])}else e.throw_error(pl.error.domain("io_mode",n,t.indicator));else e.throw_error(pl.error.domain("source_sink",i,t.indicator));else e.throw_error(pl.error.type("variable",a,t.indicator));else e.throw_error(pl.error.type("list",o,t.indicator));else e.throw_error(pl.error.type("atom",n,t.indicator))},"close/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term("close",[i,new Term("[]",[])])),r.substitution,r)])},"close/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i)||pl.type.is_variable(n))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_list(n))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream){for(var o,s={},l=n;pl.type.is_term(l)&&"./2"===l.indicator;){if(o=l.args[0],pl.type.is_variable(o))return void e.throw_error(pl.error.instantiation(t.indicator));if(!pl.type.is_close_option(o))return void e.throw_error(pl.error.domain("close_option",o,t.indicator));s[o.id]="true"===o.args[0].id,l=l.args[1]}if("[]/0"!==l.indicator)return void(pl.type.is_variable(l)?e.throw_error(pl.error.instantiation(t.indicator)):e.throw_error(pl.error.type("list",n,t.indicator)));if(a===e.session.standard_input||a===e.session.standard_output)return void e.success(r);a===e.session.current_input?e.session.current_input=e.session.standard_input:a===e.session.current_output&&(e.session.current_output=e.session.current_output),null!==a.alias?delete e.session.streams[a.alias]:delete e.session.streams[a.id],a.output&&a.stream.flush();var p=a.stream.close();a.stream=null,!0!==s.force&&!0!==p||e.success(r)}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("list",n,t.indicator))},"flush_output/0":function(e,r,t){e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("flush_output",[new Var("S")])])),r.substitution,r)])},"flush_output/1":function(e,r,t){var i=t.args[0],n=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(n)&&null!==n.stream?!0===i.input?e.throw_error(pl.error.permission("output","stream",output,t.indicator)):(n.stream.flush(),e.success(r)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator))},"stream_property/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_variable(i)||pl.type.is_stream(a)&&null!==a.stream)if(pl.type.is_variable(n)||pl.type.is_stream_property(n)){var o=[],s=[];if(pl.type.is_variable(i))for(var l in e.session.streams)o.push(e.session.streams[l]);else o.push(a);for(var p=0;p<o.length;p++){var u=[];o[p].filename&&u.push(new Term("file_name",[new Term(o[p].file_name,[])])),u.push(new Term("mode",[new Term(o[p].mode,[])])),u.push(new Term(o[p].input?"input":"output",[])),o[p].alias&&u.push(new Term("alias",[new Term(o[p].alias,[])])),u.push(new Term("position",["number"==typeof o[p].position?new Num(o[p].position,!1):new Term(o[p].position,[])])),u.push(new Term("end_of_stream",[new Term("end_of_stream"===o[p].position?"at":"past_end_of_stream"===o[p].position?"past":"not",[])])),u.push(new Term("eof_action",[new Term(o[p].eof_action,[])])),u.push(new Term("reposition",[new Term(o[p].reposition?"true":"false",[])])),u.push(new Term("type",[new Term(o[p].type,[])]));for(var _=0;_<u.length;_++)s.push(new State(r.goal.replace(new Term(",",[new Term("=",[pl.type.is_variable(i)?i:a,o[p]]),new Term("=",[n,u[_]])])),r.substitution,r))}e.prepend(s)}else e.throw_error(pl.error.domain("stream_property",n,t.indicator));else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator))},"at_end_of_stream/0":function(e,r,t){e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term(",",[new Term("stream_property",[new Var("S"),new Term("end_of_stream",[new Var("E")])]),new Term(",",[new Term("!",[]),new Term(";",[new Term("=",[new Var("E"),new Term("at",[])]),new Term("=",[new Var("E"),new Term("past",[])])])])])])),r.substitution,r)])},"at_end_of_stream/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("stream_property",[i,new Term("end_of_stream",[new Var("E")])]),new Term(",",[new Term("!",[]),new Term(";",[new Term("=",[new Var("E"),new Term("at",[])]),new Term("=",[new Var("E"),new Term("past",[])])])])])),r.substitution,r)])},"set_stream_position/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)||pl.type.is_variable(n)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(a)&&null!==a.stream?pl.type.is_stream_position(n)?!1===a.reposition?e.throw_error(pl.error.permission("reposition","stream",i,t.indicator)):(pl.type.is_integer(n)?a.position=n.value:a.position=n.id,e.success(r)):e.throw_error(pl.error.domain("stream_position",n,t.indicator)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator))},"get_char/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("get_char",[new Var("S"),i])])),r.substitution,r)])},"get_char/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_character(n))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream)if(a.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("binary"===a.type)e.throw_error(pl.error.permission("input","binary_stream",i,t.indicator));else if("past_end_of_stream"===a.position&&"error"===a.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{var o;if("end_of_stream"===a.position)o="end_of_file",a.position="past_end_of_stream";else{if(null===(o=a.stream.get(1,a.position)))return void e.throw_error(pl.error.representation("character",t.indicator));a.position++}e.prepend([new State(r.goal.replace(new Term("=",[new Term(o,[]),n])),r.substitution,r)])}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("in_character",n,t.indicator))},"get_code/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("get_code",[new Var("S"),i])])),r.substitution,r)])},"get_code/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_integer(n))if(pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream)if(a.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("binary"===a.type)e.throw_error(pl.error.permission("input","binary_stream",i,t.indicator));else if("past_end_of_stream"===a.position&&"error"===a.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{var o;if("end_of_stream"===a.position)o=-1,a.position="past_end_of_stream";else{if(null===(o=a.stream.get(1,a.position)))return void e.throw_error(pl.error.representation("character",t.indicator));o=codePointAt(o,0),a.position++}e.prepend([new State(r.goal.replace(new Term("=",[new Num(o,!1),n])),r.substitution,r)])}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("integer",char,t.indicator))},"peek_char/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("peek_char",[new Var("S"),i])])),r.substitution,r)])},"peek_char/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_character(n))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream)if(a.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("binary"===a.type)e.throw_error(pl.error.permission("input","binary_stream",i,t.indicator));else if("past_end_of_stream"===a.position&&"error"===a.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{var o;if("end_of_stream"===a.position)o="end_of_file",a.position="past_end_of_stream";else if(null===(o=a.stream.get(1,a.position)))return void e.throw_error(pl.error.representation("character",t.indicator));e.prepend([new State(r.goal.replace(new Term("=",[new Term(o,[]),n])),r.substitution,r)])}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("in_character",n,t.indicator))},"peek_code/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("peek_code",[new Var("S"),i])])),r.substitution,r)])},"peek_code/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_integer(n))if(pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream)if(a.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("binary"===a.type)e.throw_error(pl.error.permission("input","binary_stream",i,t.indicator));else if("past_end_of_stream"===a.position&&"error"===a.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{var o;if("end_of_stream"===a.position)o=-1,a.position="past_end_of_stream";else{if(null===(o=a.stream.get(1,a.position)))return void e.throw_error(pl.error.representation("character",t.indicator));o=codePointAt(o,0)}e.prepend([new State(r.goal.replace(new Term("=",[new Num(o,!1),n])),r.substitution,r)])}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("integer",char,t.indicator))},"put_char/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("put_char",[new Var("S"),i])])),r.substitution,r)])},"put_char/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)||pl.type.is_variable(n)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_character(n)?pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(a)&&null!==a.stream?a.input?e.throw_error(pl.error.permission("output","stream",i,t.indicator)):"binary"===a.type?e.throw_error(pl.error.permission("output","binary_stream",i,t.indicator)):a.stream.put(n.id,a.position)&&("number"==typeof a.position&&a.position++,e.success(r)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator)):e.throw_error(pl.error.type("character",n,t.indicator))},"put_code/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("put_code",[new Var("S"),i])])),r.substitution,r)])},"put_code/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)||pl.type.is_variable(n)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_integer(n)?pl.type.is_character_code(n)?pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(a)&&null!==a.stream?a.input?e.throw_error(pl.error.permission("output","stream",i,t.indicator)):"binary"===a.type?e.throw_error(pl.error.permission("output","binary_stream",i,t.indicator)):a.stream.put_char(fromCodePoint(n.value),a.position)&&("number"==typeof a.position&&a.position++,e.success(r)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator)):e.throw_error(pl.error.representation("character_code",t.indicator)):e.throw_error(pl.error.type("integer",n,t.indicator))},"nl/0":function(e,r,t){e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("put_char",[new Var("S"),new Term("\n",[])])])),r.substitution,r)])},"nl/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term("put_char",[i,new Term("\n",[])])),r.substitution,r)])},"get_byte/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("get_byte",[new Var("S"),i])])),r.substitution,r)])},"get_byte/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_byte(n))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream)if(a.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("text"===a.type)e.throw_error(pl.error.permission("input","text_stream",i,t.indicator));else if("past_end_of_stream"===a.position&&"error"===a.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{var o;if("end_of_stream"===a.position)o="end_of_file",a.position="past_end_of_stream";else{if(null===(o=a.stream.get_byte(a.position)))return void e.throw_error(pl.error.representation("byte",t.indicator));a.position++}e.prepend([new State(r.goal.replace(new Term("=",[new Num(o,!1),n])),r.substitution,r)])}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("in_byte",char,t.indicator))},"peek_byte/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("peek_byte",[new Var("S"),i])])),r.substitution,r)])},"peek_byte/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_variable(n)||pl.type.is_byte(n))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(a)&&null!==a.stream)if(a.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("text"===a.type)e.throw_error(pl.error.permission("input","text_stream",i,t.indicator));else if("past_end_of_stream"===a.position&&"error"===a.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{var o;if("end_of_stream"===a.position)o="end_of_file",a.position="past_end_of_stream";else if(null===(o=a.stream.get_byte(a.position)))return void e.throw_error(pl.error.representation("byte",t.indicator));e.prepend([new State(r.goal.replace(new Term("=",[new Num(o,!1),n])),r.substitution,r)])}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("in_byte",char,t.indicator))},"put_byte/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("put_byte",[new Var("S"),i])])),r.substitution,r)])},"put_byte/2":function(e,r,t){var i=t.args[0],n=t.args[1],a=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);pl.type.is_variable(i)||pl.type.is_variable(n)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_byte(n)?pl.type.is_variable(i)||pl.type.is_stream(i)||pl.type.is_atom(i)?pl.type.is_stream(a)&&null!==a.stream?a.input?e.throw_error(pl.error.permission("output","stream",i,t.indicator)):"text"===a.type?e.throw_error(pl.error.permission("output","text_stream",i,t.indicator)):a.stream.put_byte(n.value,a.position)&&("number"==typeof a.position&&a.position++,e.success(r)):e.throw_error(pl.error.existence("stream",i,t.indicator)):e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator)):e.throw_error(pl.error.type("byte",n,t.indicator))},"read/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("read_term",[new Var("S"),i,new Term("[]",[])])])),r.substitution,r)])},"read/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("read_term",[i,n,new Term("[]",[])])),r.substitution,r)])},"read_term/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_input",[new Var("S")]),new Term("read_term",[new Var("S"),i,n])])),r.substitution,r)])},"read_term/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2],o=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i)||pl.type.is_variable(a))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_list(a))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(o)&&null!==o.stream)if(o.output)e.throw_error(pl.error.permission("input","stream",i,t.indicator));else if("binary"===o.type)e.throw_error(pl.error.permission("input","binary_stream",i,t.indicator));else if("past_end_of_stream"===o.position&&"error"===o.eof_action)e.throw_error(pl.error.permission("input","past_end_of_stream",i,t.indicator));else{for(var s,l={},p=a;pl.type.is_term(p)&&"./2"===p.indicator;){if(s=p.args[0],pl.type.is_variable(s))return void e.throw_error(pl.error.instantiation(t.indicator));if(!pl.type.is_read_option(s))return void e.throw_error(pl.error.domain("read_option",s,t.indicator));l[s.id]=s.args[0],p=p.args[1]}if("[]/0"!==p.indicator)return void(pl.type.is_variable(p)?e.throw_error(pl.error.instantiation(t.indicator)):e.throw_error(pl.error.type("list",a,t.indicator)));for(var u,_,c,f="",d=[],m=null;null===m||"atom"!==m.name||"."!==m.value||c.type===ERROR&&"token_not_found"===pl.flatten_error(new Term("throw",[c.value])).found;){if(null===(u=o.stream.get(1,o.position)))return void e.throw_error(pl.error.representation("character",t.indicator));if("end_of_file"===u||"past_end_of_file"===u)return void(c?e.throw_error(pl.error.syntax(d[c.len-1],". or expression expected",!1)):e.throw_error(pl.error.syntax(null,"token not found",!0)));o.position++,f+=u,(_=new Tokenizer(e)).new_text(f),m=null!==(d=_.get_tokens())&&d.length>0?d[d.length-1]:null,null!==d&&(c=parseExpr(e,d,0,e.__get_max_priority(),!1))}if(c.type===SUCCESS&&c.len===d.length-1&&"."===m.value){var w=new Term("=",[n,c=c.value.rename(e)]);if(l.variables){var g=arrayToList(map(nub(c.variables()),function(e){return new Var(e)}));w=new Term(",",[w,new Term("=",[l.variables,g])])}if(l.variable_names){g=arrayToList(map(nub(c.variables()),function(r){var t;for(t in e.session.renamed_variables)if(e.session.renamed_variables.hasOwnProperty(t)&&e.session.renamed_variables[t]===r)break;return new Term("=",[new Term(t,[]),new Var(r)])}));w=new Term(",",[w,new Term("=",[l.variable_names,g])])}if(l.singletons){g=arrayToList(map(new Rule(c,null).singleton_variables(),function(r){var t;for(t in e.session.renamed_variables)if(e.session.renamed_variables.hasOwnProperty(t)&&e.session.renamed_variables[t]===r)break;return new Term("=",[new Term(t,[]),new Var(r)])}));w=new Term(",",[w,new Term("=",[l.singletons,g])])}e.prepend([new State(r.goal.replace(w),r.substitution,r)])}else c.type===SUCCESS?e.throw_error(pl.error.syntax(d[c.len],"unexpected token",!1)):e.throw_error(c.value)}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("list",a,t.indicator))},"write/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("write",[new Var("S"),i])])),r.substitution,r)])},"write/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("write_term",[i,n,new Term(".",[new Term("quoted",[new Term("false",[])]),new Term(".",[new Term("ignore_ops",[new Term("false")]),new Term(".",[new Term("numbervars",[new Term("true")]),new Term("[]",[])])])])])),r.substitution,r)])},"writeq/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("writeq",[new Var("S"),i])])),r.substitution,r)])},"writeq/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("write_term",[i,n,new Term(".",[new Term("quoted",[new Term("true",[])]),new Term(".",[new Term("ignore_ops",[new Term("false")]),new Term(".",[new Term("numbervars",[new Term("true")]),new Term("[]",[])])])])])),r.substitution,r)])},"write_canonical/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("write_canonical",[new Var("S"),i])])),r.substitution,r)])},"write_canonical/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("write_term",[i,n,new Term(".",[new Term("quoted",[new Term("true",[])]),new Term(".",[new Term("ignore_ops",[new Term("true")]),new Term(".",[new Term("numbervars",[new Term("false")]),new Term("[]",[])])])])])),r.substitution,r)])},"write_term/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term(",",[new Term("current_output",[new Var("S")]),new Term("write_term",[new Var("S"),i,n])])),r.substitution,r)])},"write_term/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2],o=pl.type.is_stream(i)?i:e.get_stream_by_alias(i.id);if(pl.type.is_variable(i)||pl.type.is_variable(a))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_list(a))if(pl.type.is_stream(i)||pl.type.is_atom(i))if(pl.type.is_stream(o)&&null!==o.stream)if(o.input)e.throw_error(pl.error.permission("output","stream",i,t.indicator));else if("binary"===o.type)e.throw_error(pl.error.permission("output","binary_stream",i,t.indicator));else if("past_end_of_stream"===o.position&&"error"===o.eof_action)e.throw_error(pl.error.permission("output","past_end_of_stream",i,t.indicator));else{for(var s,l={},p=a;pl.type.is_term(p)&&"./2"===p.indicator;){if(s=p.args[0],pl.type.is_variable(s))return void e.throw_error(pl.error.instantiation(t.indicator));if(!pl.type.is_write_option(s))return void e.throw_error(pl.error.domain("write_option",s,t.indicator));l[s.id]="true"===s.args[0].id,p=p.args[1]}if("[]/0"!==p.indicator)return void(pl.type.is_variable(p)?e.throw_error(pl.error.instantiation(t.indicator)):e.throw_error(pl.error.type("list",a,t.indicator)));l.session=e.session;var u=n.toString(l);o.stream.put(u,o.position),"number"==typeof o.position&&(o.position+=u.length),e.success(r)}else e.throw_error(pl.error.existence("stream",i,t.indicator));else e.throw_error(pl.error.domain("stream_or_alias",i,t.indicator));else e.throw_error(pl.error.type("list",a,t.indicator))},"halt/0":function(e,r,t){nodejs_flag&&process.exit(),e.points=[]},"halt/1":function(e,r,t){var i=t.args[0];pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_integer(i)?(nodejs_flag&&process.exit(i.value),e.points=[]):e.throw_error(pl.error.type("integer",i,t.indicator))},"current_prolog_flag/2":function(e,r,t){var i=t.args[0],n=t.args[1];if(pl.type.is_variable(i)||pl.type.is_atom(i))if(pl.type.is_variable(i)||pl.type.is_flag(i)){var a=[];for(var o in pl.flag)if(pl.flag.hasOwnProperty(o)){var s=new Term(",",[new Term("=",[new Term(o),i]),new Term("=",[e.get_flag(o),n])]);a.push(new State(r.goal.replace(s),r.substitution,r))}e.prepend(a)}else e.throw_error(pl.error.domain("prolog_flag",i,t.indicator));else e.throw_error(pl.error.type("atom",i,t.indicator))},"set_prolog_flag/2":function(e,r,t){var i=t.args[0],n=t.args[1];pl.type.is_variable(i)||pl.type.is_variable(n)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_atom(i)?pl.type.is_flag(i)?pl.type.is_value_flag(i,n)?pl.type.is_modifiable_flag(i)?(e.session.flag[i.id]=n,e.success(r)):e.throw_error(pl.error.permission("modify","flag",i)):e.throw_error(pl.error.domain("flag_value",new Term("+",[i,n]),t.indicator)):e.throw_error(pl.error.domain("prolog_flag",i,t.indicator)):e.throw_error(pl.error.type("atom",i,t.indicator))},"shell/1":function(e,r,t){var i=t.args[0];e.prepend([new State(r.goal.replace(new Term("shell",[i,new Num(0,!1)])),r.substitution,r)])},"shell/2":function(thread,point,atom){var command=atom.args[0],status=atom.args[1];if(pl.type.is_variable(command))thread.throw_error(pl.error.instantiation(atom.indicator));else if(pl.type.is_atom(command))if(pl.type.is_variable(status)||pl.type.is_integer(status)){if(nodejs_flag){const{exec:e}=require("child_process");return e(command.id,function(){}).on("exit",function(e){thread.prepend([new State(point.goal.replace(new Term("=",[status,new Num(e,!1)])),point.substitution,point)]),thread.again()}),!0}try{eval(command.id),thread.prepend([new State(point.goal.replace(new Term("=",[status,new Num(0,!1)])),point.substitution,point)])}catch(e){thread.prepend([new State(point.goal.replace(new Term("=",[status,new Num(1,!1)])),point.substitution,point)])}}else thread.throw_error(pl.error.type("integer",status,atom.indicator));else thread.throw_error(pl.error.type("atom",command,atom.indicator))},"consult/1":function(e,r,t){var i=t.args[0];pl.type.is_variable(i)?e.throw_error(pl.error.instantiation(t.indicator)):pl.type.is_atom(i)?e.consult(i.id)&&e.success(r):e.throw_error(pl.error.type("atom",i,t.indicator))},"get_time/1":function(e,r,t){var i=t.args[0];if(pl.type.is_variable(i)||pl.type.is_number(i)){var n=new Num(Date.now(),!0);e.prepend([new State(r.goal.replace(new Term("=",[i,n])),r.substitution,r)])}else e.throw_error(pl.error.type("number",i,t.indicator))},"phrase/3":function(e,r,t){var i=t.args[0],n=t.args[1],a=t.args[2];if(pl.type.is_variable(i))e.throw_error(pl.error.instantiation(t.indicator));else if(pl.type.is_callable(i)){var o=body_to_dcg(i.clone(),n,e);null!==o&&e.prepend([new State(r.goal.replace(new Term(",",[o.value,new Term("=",[o.variable,a])])),r.substitution,r)])}else e.throw_error(pl.error.type("callable",i,t.indicator))},"phrase/2":function(e,r,t){var i=t.args[0],n=t.args[1];e.prepend([new State(r.goal.replace(new Term("phrase",[i,n,new Term("[]",[])])),r.substitution,r)])},"version/0":function(e,r,t){var i="Welcome to Tau Prolog version "+version.major+"."+version.minor+"."+version.patch+"\n";i+="Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\n",i+="Please run ?- license. for legal details.\n",i+="For online help and background, visit http:/tau-prolog.org",e.prepend([new State(r.goal.replace(new Term("write",[new Term(i,[])])),r.substitution,r)])},"license/0":function(e,r,t){e.prepend([new State(r.goal.replace(new Term("write",[new Term('Tau Prolog. A Prolog interpreter in JavaScript.\nCopyright (C) 2017 - 2020 José Antonio Riaza Valverde\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nYou should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause',[])])),r.substitution,r)])}},flag:{bounded:{allowed:[new Term("true"),new Term("false")],value:new Term("true"),changeable:!1},max_integer:{allowed:[new Num(Number.MAX_SAFE_INTEGER)],value:new Num(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Num(Number.MIN_SAFE_INTEGER)],value:new Num(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new Term("down"),new Term("toward_zero")],value:new Term("toward_zero"),changeable:!1},char_conversion:{allowed:[new Term("on"),new Term("off")],value:new Term("on"),changeable:!0},debug:{allowed:[new Term("on"),new Term("off")],value:new Term("off"),changeable:!0},max_arity:{allowed:[new Term("unbounded")],value:new Term("unbounded"),changeable:!1},unknown:{allowed:[new Term("error"),new Term("fail"),new Term("warning")],value:new Term("error"),changeable:!0},double_quotes:{allowed:[new Term("chars"),new Term("codes"),new Term("atom")],value:new Term("codes"),changeable:!0},occurs_check:{allowed:[new Term("false"),new Term("true")],value:new Term("false"),changeable:!0},dialect:{allowed:[new Term("tau")],value:new Term("tau"),changeable:!1},version_data:{allowed:[new Term("tau",[new Num(version.major,!1),new Num(version.minor,!1),new Num(version.patch,!1),new Term(version.status)])],value:new Term("tau",[new Num(version.major,!1),new Num(version.minor,!1),new Num(version.patch,!1),new Term(version.status)]),changeable:!1},nodejs:{allowed:[new Term("yes"),new Term("no")],value:new Term(nodejs_flag?"yes":"no"),changeable:!1},argv:{allowed:[nodejs_arguments],value:nodejs_arguments,changeble:!1}},unify:function(e,r,t){t=void 0!==t&&t;for(var i=[{left:e,right:r}],n={};0!==i.length;){var a=i.pop();if((e=a.left)!=(r=a.right))if(pl.type.is_term(e)&&pl.type.is_term(r)){if(e.indicator!==r.indicator)return null;if("./2"===e.indicator){for(var o=e,s=r;"./2"===o.indicator&&"./2"===s.indicator;)i.push({left:o.args[0],right:s.args[0]}),o=o.args[1],s=s.args[1];i.push({left:o,right:s})}else for(var l=0;l<e.args.length;l++)i.push({left:e.args[l],right:r.args[l]})}else if(pl.type.is_number(e)&&pl.type.is_number(r)){if(e.value!==r.value||e.is_float!==r.is_float)return null}else if(pl.type.is_variable(e)){if(pl.type.is_variable(r)&&e.id===r.id)continue;if(!0===t&&-1!==indexOf(r.variables(),e.id))return null;if("_"!==e.id){var p=new Substitution;p.add(e.id,r);for(l=0;l<i.length;l++)i[l].left=i[l].left.apply(p),i[l].right=i[l].right.apply(p);for(var l in n)n[l]=n[l].apply(p);n[e.id]=r}}else if(pl.type.is_variable(r))i.push({left:r,right:e});else{if(void 0===e.unify)return null;if(!e.unify(r))return null}}return new Substitution(n)},compare:function(e,r){var t=pl.type.compare(e,r);return 0!==t?t:e.compare(r)},arithmetic_compare:function(e,r,t){var i=r.interpret(e);if(pl.type.is_number(i)){var n=t.interpret(e);return pl.type.is_number(n)?i.value<n.value?-1:i.value>n.value?1:0:n}return i},operate:function(e,r){if(pl.type.is_operator(r)){for(var t,i=pl.type.is_operator(r),n=[],a=!1,o=0;o<r.args.length;o++){if(t=r.args[o].interpret(e),!pl.type.is_number(t))return t;if(null!==i.type_args&&t.is_float!==i.type_args)return pl.error.type(i.type_args?"float":"integer",t,e.__call_indicator);n.push(t.value),a=a||t.is_float}return n.push(e),t=pl.arithmetic.evaluation[r.indicator].fn.apply(this,n),a=null===i.type_result?a:i.type_result,pl.type.is_term(t)?t:t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY?pl.error.evaluation("overflow",e.__call_indicator):!1===a&&"true"===e.get_flag("bounded").id&&(t>e.get_flag("max_integer").value||t<e.get_flag("min_integer").value)?pl.error.evaluation("int_overflow",e.__call_indicator):new Num(t,a)}return pl.error.type("evaluable",r.indicator,e.__call_indicator)},error:{existence:function(e,r,t){return"string"==typeof r&&(r=str_indicator(r)),new Term("error",[new Term("existence_error",[new Term(e),r]),str_indicator(t)])},type:function(e,r,t){return new Term("error",[new Term("type_error",[new Term(e),r]),str_indicator(t)])},instantiation:function(e){return new Term("error",[new Term("instantiation_error"),str_indicator(e)])},domain:function(e,r,t){return new Term("error",[new Term("domain_error",[new Term(e),r]),str_indicator(t)])},representation:function(e,r){return new Term("error",[new Term("representation_error",[new Term(e)]),str_indicator(r)])},permission:function(e,r,t,i){return new Term("error",[new Term("permission_error",[new Term(e),new Term(r),t]),str_indicator(i)])},evaluation:function(e,r){return new Term("error",[new Term("evaluation_error",[new Term(e)]),str_indicator(r)])},syntax:function(e,r,t){e=e||{value:"",line:0,column:0,matches:[""],start:0};var i=t&&e.matches.length>0?e.start+e.matches[0].length:e.start,n=t?new Term("token_not_found"):new Term("found",[new Term(e.value.toString())]),a=new Term(".",[new Term("line",[new Num(e.line+1)]),new Term(".",[new Term("column",[new Num(i+1)]),new Term(".",[n,new Term("[]",[])])])]);return new Term("error",[new Term("syntax_error",[new Term(r)]),a])},syntax_by_predicate:function(e,r){return new Term("error",[new Term("syntax_error",[new Term(e)]),str_indicator(r)])}},warning:{singleton:function(e,r,t){for(var i=new Term("[]"),n=e.length-1;n>=0;n--)i=new Term(".",[new Var(e[n]),i]);return new Term("warning",[new Term("singleton_variables",[i,str_indicator(r)]),new Term(".",[new Term("line",[new Num(t,!1)]),new Term("[]")])])},failed_goal:function(e,r){return new Term("warning",[new Term("failed_goal",[e]),new Term(".",[new Term("line",[new Num(r,!1)]),new Term("[]")])])}},format_variable:function(e){return"_"+e},format_answer:function(e,r,t){if(r instanceof Session&&(r=r.thread),(t=t||{}).session=r?r.session:void 0,pl.type.is_error(e))return"uncaught exception: "+e.args[0].toString();if(!1===e)return"false.";if(null===e)return"limit exceeded ;";var i=0,n="";if(pl.type.is_substitution(e)){var a=e.domain(!0);e=e.filter(function(r,t){return!pl.type.is_variable(t)||pl.type.is_variable(t)&&e.has_attributes(r)||-1!==indexOf(a,t.id)&&r!==t.id})}for(var o in e.links)if(e.links.hasOwnProperty(o))if(pl.type.is_variable(e.links[o])&&o===e.links[o].id){var s=e.attrs[o];for(var l in s)s.hasOwnProperty(l)&&(i++,""!==n&&(n+=", "),n+="put_attr("+o+", "+l+", "+s[l].toString(t)+")")}else i++,""!==n&&(n+=", "),n+=o.toString(t)+" = "+e.links[o].toString(t,{priority:"700",class:"xfx",indicator:"=/2"},"right");var p=void 0===r||r.points.length>0?" ;":".";return 0===i?"true"+p:n+p},flatten_error:function(e){if(!pl.type.is_error(e))return null;e=e.args[0];var r={};return r.type=e.args[0].id,r.thrown="syntax_error"===r.type?null:e.args[1].id,r.expected=null,r.found=null,r.representation=null,r.existence=null,r.existence_type=null,r.line=null,r.column=null,r.permission_operation=null,r.permission_type=null,r.evaluation_type=null,"type_error"===r.type||"domain_error"===r.type?(r.expected=e.args[0].args[0].id,r.found=e.args[0].args[1].toString()):"syntax_error"===r.type?"./2"===e.args[1].indicator?(r.expected=e.args[0].args[0].id,r.found=e.args[1].args[1].args[1].args[0],r.found="token_not_found"===r.found.id?r.found.id:r.found.args[0].id,r.line=e.args[1].args[0].args[0].value,r.column=e.args[1].args[1].args[0].args[0].value):r.thrown=e.args[1].id:"permission_error"===r.type?(r.found=e.args[0].args[2].toString(),r.permission_operation=e.args[0].args[0].id,r.permission_type=e.args[0].args[1].id):"evaluation_error"===r.type?r.evaluation_type=e.args[0].args[0].id:"representation_error"===r.type?r.representation=e.args[0].args[0].id:"existence_error"===r.type&&(r.existence=e.args[0].args[1].toString(),r.existence_type=e.args[0].args[0].id),r},create:function(e){return new pl.type.Session(e)}};"undefined"!=typeof module?module.exports=pl:window.pl=pl}();
//# sourceMappingURL=/sm/90497c2bdc69f281c34f504e2290638a0bf70c5d43595867e2e0e52ccc4001a9.map