turtlestitch/libraries/bignumbers.xml

1 wiersz
16 KiB
XML
Czysty Zwykły widok Historia

2020-07-26 04:46:48 +00:00
<blocks app="Snap! 6, https://snap.berkeley.edu" version="1"><block-definition s="USE BIGNUMS %&apos;bool&apos;" type="command" category="operators"><comment x="0" y="0" w="303.3333333333333" collapsed="false">call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.</comment><header></header><code></code><translations>pt:altera utilização de aritmética do Scheme para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>isDone</l></list></block><block s="doSetVar"><l>isDone</l><block s="evaluate"><block s="reportJSFunction"><list><l>useBigNums</l></list><l>var done = false;&#xD;&#xD;function initialize (callback) {&#xD; var bigScript = document.createElement(&apos;script&apos;);&#xD; bigScript.src = &apos;//snap.berkeley.edu/snap/libraries/biginteger.js&apos;;&#xD; bigScript.onload = loadScheme;&#xD; document.head.appendChild(bigScript);&#xD;&#xD; function loadScheme () {&#xD; var schemeScript = document.createElement(&apos;script&apos;);&#xD; schemeScript.src = &apos;//snap.berkeley.edu/snap/libraries/schemeNumber.js&apos;;&#xD; schemeScript.onload = finish;&#xD; document.head.appendChild(schemeScript);&#xD; }&#xD;&#xD; function finish () {&#xD; makeGlobalObject();&#xD; callback();&#xD; }&#xD;}&#xD;&#xD;function makeGlobalObject () {&#xD; window.bigNumbers = {&#xD; originalEvaluate: InputSlotMorph.prototype.evaluate,&#xD; originalChangeVar: VariableFrame.prototype.changeVar,&#xD; originalPrims: {&#xD; reportBasicSum: Process.prototype.reportBasicSum,&#xD; reportBasicDifference: Process.prototype.reportBasicDifference,&#xD; reportBasicProduct: Process.prototype.reportBasicProduct,&#xD; reportBasicQuotient: Process.prototype.reportBasicQuotient,&#xD; reportBasicPower: Process.prototype.reportBasicPower,&#xD; reportBasicModulus: Process.prototype.reportBasicModulus,&#xD; reportBasicRandom: Process.prototype.reportBasicRandom,&#xD; reportBasicLessThan: Process.prototype.reportBasicLessThan,&#xD; reportBasicGreaterThan: Process.prototype.reportBasicGreaterThan,&#xD; reportEquals: Process.prototype.reportEquals,&#xD; reportIsIdentical: Process.prototype.reportIsIdentical,&#xD; reportMonadic: Process.prototype.reportMonadic&#xD; }&#xD; };&#xD;}&#xD;&#xD;function loadBlocks () {&#xD; var fn = SchemeNumber.fn;&#xD; var originalPrims = window.bigNumbers.originalPrims;&#xD; if (useBigNums) {&#xD; InputSlotMorph.prototype.evaluate = function () {&#xD; var contents = this.contents();&#xD; if (this.constant) {&#xD; return this.constant;&#xD; }&#xD; if (this.isNumeric) {&#xD; return parseNumber(contents.text || &apos;0&apos;);&#xD; }&#xD; return contents.text;&#xD; };&#xD; VariableFrame.prototype.changeVar = function (name, delta, sender) {&#xD; var frame = this.find(name),&#xD; value,&#xD; newValue;&#xD; if (frame) {&#xD; value = parseNumber(frame.vars[name].value);&#xD; newValue = Number.isNaN(value) ? delta : fn[&apos;+&apos;](value, parseNumber(delta));&#xD; if (sender instanceof SpriteMorph &amp;&amp;&#xD; (frame.owner instanceof SpriteMorph) &amp;&amp;&#xD; (sender !== frame.owner)) {&#xD; sender.shadowVar(name, newValue);&#xD; } else {&#xD; frame.vars[name].value = newValue;&#xD; }&#xD;&#xD; }&#xD; };&#xD; Object.assign(Process.prototype, {&#xD; reportBasicSum: function (a, b) {&#xD; a = parseNumber(a);&#xD; b =