<snapdata remixID="12140609"><project name="Fuzzy logic toolkit" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><notes>A collection of operators for "fuzzy logic" (a system of soft truths, denoted by values between 0 = false and 1 = true):&#xD;&#xD;AND, OR, NOR, NAND,&#xD;XOR, NOT, Pythagorean NOT,&#xD;conversions to and from the fuzzy domain.&#xD;&#xD;Nothing happens if the green flag is clicked - look inside to see if it&apos;s useful to you.</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAA/tJREFUeF7t189K1AEUxfHrjNhSsAxMCg1aSAitWlUkRDuLcjExgTNQrooIolaRvUYQPUHMCwT9wegB2gotaiE4EIU0jcLwC4UKEXUIx+s5fV25+Pm7957zYQb7iqIogh8SSEqgD4BJyTN2IwEAAiE1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbGz3AAYiA1AQCmxs9wAGIgNQEApsbPcABiIDUBAKbG3/3wlZWVeP3qTVy9fqX7PxJ4EoACJf1e8f7Mk/jZGInDU504c2EiJmaOxuTkpNAFW1cF4Db1NRqNWF5ejunp6RgdHT0wJT+9+CK+vRv4s08zPse52ukoj7Xi2p1LMTw8fGB27WYRAG6TUrvdjlqtFmtraxsQ13/vdDoxNzcX/f393WTbk2fev/0QL6c+bXl3EUV8H1uMs7fG4/ajmzEw8BdpTxbZo5cCcIcgFxYWYn5+PgYHBzc91Wq1ol6vR1EUUa1W96iK3V+ztLQUD08+jyPt8Y2Hvxz6GPUHlfg6shi1uzd2f8EBfAKA/wBw/dNxdnY2SqVSVCqVfav18flncfzUsSid+BEz9y7H0NDQvs3u1SAA7vAVvP4pt7q6Gs1mc9NXcLlc7lUf/917ASj2T4ibUAC6NSp2DwDFCnNbF4BujYrdA0CxwtzWBaBbo2L3AFCsMLd1AejWqNg9ABQrzG1dALo1KnYPAMUKc1sXgG6Nit0DQLHC3NYFoFujYvcAUKwwt3UB6Nao2D0AFCvMbV0AujUqdg8AxQpzWxeAbo2K3QNAscLc1gWgW6Ni9wBQrDC3dQHo1qjYPQAUK8xtXQC6NSp2DwDFCnNbF4BujYrdA0CxwtzWBaBbo2L3AFCsMLd1AejWqNg9ABQrzG1dALo1KnYPAMUKc1sXgG6Nit0DQLHC3NYFoFujYvcAUKwwt3UB6Nao2D0AFCvMbV0AujUqdg8AxQpzWxeAbo2K3QNAscLc1gWgW6Ni9wBQrDC3dQHo1qjYPQAUK8xtXQC6NSp2DwDFCnNbF4BujYrdA0CxwtzWBaBbo2L3AFCsMLd1AejWqNg9ABQrzG1dALo1KnbPL5x5SrempjmbAAAAAElFTkSuQmCC</thumbnail><scenes select="1"><scene name="Fuzzy logic toolkit"><notes>A collection of operators for "fuzzy logic" (a system of soft truths, denoted by values between 0 = false and 1 = true):&#xD;&#xD;AND, OR, NOR, NAND,&#xD;XOR, NOT, Pythagorean NOT,&#xD;conversions to and from the fuzzy domain.&#xD;&#xD;Nothing happens if the green flag is clicked - look inside to see if it&apos;s useful to you.</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="fuzzy AND %&apos;truth values&apos; %&apos;logic system&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively); reporting an output value within the same range.&#xD;&#xD;Operators:&#xD;fuzzy AND, OR, NOR and NAND operate on any number of inputs;&#xD;fuzzy XOR requires exactly two inputs;&#xD;fuzzy NOT requires a single input.&#xD;&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%txt" readonly="true"><options>product</options></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="truth values"/></block><script><block s="doReport"><l>1</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="logic system"/><l>product</l></list></block><script><block s="doReport"><block s="reportVariadicProduct"><list><custom-block s="constrained [0..1] %n"><block s="reportListItem"><l>1</l><block var="truth values"/></block></custom-block><custom-block s="fuzzy AND %mult%n %txt"><block s="reportCDR"><block var="truth values"/></block><block var="logic system"/></custom-block></list></block></block></script><list></list></block></script></block-definition><block-definition s="fuzzy OR %&apos;truth values&apos; %&apos;logic system&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively); reporting an output value within the same range.&#xD;&#xD;Operators:&#xD;fuzzy AND, OR, NOR and NAND operate on any number of inputs;&#xD;fuzzy XOR requires exactly two inputs;&#xD;fuzzy NOT requires a single input.&#xD;&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%txt" readonly="true"><options>product</options></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="logic system"/><l>product</l></list></block><script><block s="doIf"><block s="reportListIsEmpty"><block var="truth values"/></block><script><block s="doReport"><l>0</l></block></script><list></list></block><block s="doReport"><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><block s="reportDifference"><l>1</l><custom-block s="constrained [0..1] %n"><block s="reportListItem"><l>1</l><block var="truth values"/></block></custom-block></block><block s="reportDifference"><l>1</l><custom-block s="fuzzy OR %mult%n %txt"><block s="reportCDR"><block var="truth values"/></block><block var="logic system"/></custom-block></block></list></block></block></block></script><list></list></block></script></block-definition><block-definition s="fuzzy NOR %&apos;probabilities&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively); reporting an output value within the same range.&#xD;&#xD;Operators:&#xD;fuzzy AND, OR, NOR and NAND operate on any number of inputs;&#xD;fuzzy XOR requires exactly two inputs;&#xD;fuzzy NOT requires a single input.&#xD;&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="probabilities"/></block><script><block s="doReport"><l>0</l></block></script><list></list></block><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportDifference"><l>1</l><block s="reportVariadicMax"><list><block s="reportVariadicMin"><list><block s="reportListItem"><l>1</l><block var="probabilities"/></block><l>1</l></list></block><l>0</l></list></block></block><block s="reportDifference"><l>1</l><custom-block s="fuzzy NOR %mult%n"><block s="reportCDR"><block var="probabilities"/></block></custom-block></block></list></block></block></script></block-definition><block-definition s="fuzzy NAND %&apos;probabilitIes&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively); reporting an output value within the same range.&#xD;&#xD;Operators:&#xD;fuzzy AND, OR, NOR and NAND operate on any number of inputs;&#xD;fuzzy XOR requires exactly two inputs;&#xD;fuzzy NOT requires a single input.&#xD;&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="probabilitIes"/></block><script><block s="doReport"><l>1</l></block></script><list></list></block><block s="doReport"><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><block s="reportVariadicMax"><list><block s="reportVariadicMin"><list><block s="reportListItem"><l>1</l><block var="probabilitIes"/></block><l>1</l></list></block><l>0</l></list></block><custom-block s="fuzzy NAND %mult%n"><block s="reportCDR"><block var="probabilitIes"/></block></custom-block></list></block></block></block></script></block-definition><block-definition s="%&apos;probability A&apos; fuzzy XOR %&apos;probability B&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively); reporting an output value within the same range.&#xD;&#xD;Operators:&#xD;fuzzy AND, OR, NOR and NAND operate on any number of inputs;&#xD;fuzzy XOR requires exactly two inputs;&#xD;fuzzy NOT requires a single input.&#xD;&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doSetVar"><l>probability A</l><block s="reportVariadicMax"><list><block s="reportVariadicMin"><list><block var="probability A"/><l>1</l></list></block><l>0</l></list></block></block><block s="doSetVar"><l>probability B</l><block s="reportVariadicMax"><list><block s="reportVariadicMin"><list><block var="probability B"/><l>1</l></list></block><l>0</l></list></block></block><block s="doReport"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="probability A"/><block s="reportDifference"><l>1</l><block var="probability B"/></block></list></block><block s="reportVariadicProduct"><list><block s="reportDifference"><l>1</l><block var="probability A"/></block><block var="probability B"/></list></block></list></block></block></script></block-definition><block-definition s="fuzzy NOT %&apos;truth value&apos; %&apos;logic system&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively); reporting an output value within the same range.&#xD;&#xD;Operators:&#xD;fuzzy AND, OR, NOR and NAND operate on any number of inputs;&#xD;fuzzy XOR requires exactly two inputs;&#xD;fuzzy NOT requires a single input.&#xD;&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%txt" readonly="true"><options>Boolean&#xD;product</options></input></inputs><script><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>Boolean</l><l>product</l></list></block><block var="logic system"/></block><script><block s="doReport"><block s="reportDifference"><l>1</l><custom-block s="constrained [0..1] %n"><block var="truth value"/></custom-block></block></block></script><list></list></block></script></block-definition><block-definition s="fuzzy $arrowRight boolean %&apos;probability&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively), reporting an output value within the same range.&#xD;This function converts a fuzzy value to a boolean. &#xD;Input values &gt;= 0.5 yield: True; otherwise: False.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportVariadicGreaterThanOrEquals"><list><block var="probability"/><l>0.5</l></list></block></block></script></block-definition><block-definition s="fuzzy Pythagorean NOT %&apos;probability&apos;" type="reporter" category="operators"><comment x="0" y="0" w="346" collapsed="false">Fuzzy logic operators, applicable on values (probabilities) between, and including, 0 and 1 (any smaller or larger values will be taken as 0 or 1, respectively), reporting an output value within the same range.&#xD;&#xD;Sometimes the ordinary fuzzy NOT is even considered too binary. &#xD;In these cases the Pythagoran NOT may be used: p^2 + (NOT p)^2 = 1.&#xD;With input values 0 (False) and 1 (True) these fuzzy logic operators behave like their boolean equivalents.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doSetVar"><l>probability</l><block s="reportVariadicMax"><list><block s="reportVariadicMin"><list><block var="probability"/><l>1</l></list></block><l>0</l></list></block></block><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><block var="probability"/><block var="probability"/></list></block></block></block></block></script></block-definition><block-definition s="fuzzify %&apos;x0&apos; %&apos;x1&apos; %&apos;transition shape&apos; %&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="348" collapsed="false">Calculates a fuzzy logic value between, and including, 0 and 1.&#xD;A fuzzyfying function (f) is assumed, with f(x) = 0 for x &lt; x0, f(x) = 1 for x &gt; x1. For x0 &lt; x &lt; x1, f(x) is value between 0 and 0, dependent of the specified shape: this may be either linear or (sine-) wave; different shapes ar not supported as yet.&#xD;&#xD;The above applies if x0 &lt; x1. If x0 &gt; x1, f(x) = 1 for x &lt; x1, f(x) = 0 for x &gt; x0.&#xD;If x0 = x1 there is not much fuzziness; f(x) = 0 for x &lt; x0, f(x) = 1 for x &gt; x1 (if you would like to have it the other way: apply (fuzzy) NOT over this function).&#xD;&#xD;Fuzzifying functions can easily be combined (via multiplication, or fuzzy AND) to create a more sophisticated characteristic, perhaps with several fuzzy areas.&#xD;E.g. (fuzzy AND ((fuzzify (0, 1, ...) , (fuzzify (5, 3, ...))) will create a compund function with f(x) = 0 for values of x below 0 and above 5, f(x) = 1 for x between 1 and 3, plus two transition zones.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">1</input><input type="%s" readonly="true"><options>linear&#xD;wave</options></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportVariadicNotEquals"><list><block var="x0"/><block var="x1"/></list></block><script><block s="doDeclareVariables"><list><l>normalized position</l></list></block><block s="doSetVar"><l>normalized position</l><block s="reportQuotient"><block s="reportDifference"><block var="x"/><block var="x0"/></block><block s="reportDifference"><block var="x1"/><block var="x0"/></block></block></block><block s="doIf"><block s="reportVariadicLessThanOrEquals"><list><block var="normalized position"/><l>0</l></list></block><script><block s="doReport"><l>0</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThanOrEquals"><list><block var="normalized position"/><l>1</l></list></block><script><block s="doReport"><l>1</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="transition shape"/><l>wave</l></list></block><script><block s="doReport"><block s="reportDifference"><l>0.5</l><block s="reportQuotient"><block s="reportMonadic"><l><option>cos</option></l><block s="reportVariadicProduct"><list><block var="normalized position"/><l>180</l></list></block></block><l>2</l></block></block></block></script><list></list></block><block s="doReport"><block var="normalized position"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicLessThan"><list><block var="x"/><block var="x0"/></list></block><script><block s="doReport"><l>0</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="x"/><block var="x1"/></list></block><script><block s="doReport"><l>1</l></block></script><list></list></block><block s="doReport"><l>0.5</l></block></script></block-definition><block-definition s="constrained [0..1] %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportVariadicMax"><list><block s="reportVariadicMin"><list><block var="value"/><l>1</l></list></block><l>0</l></list></block></block></script></block-definition><block-definition s="%&apos;logic system&apos; %&apos;logic operator&apos; %&apos;truth values&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">Boolean<options>Boolean&#xD;ternary&#xD;fuzzy (product)&#xD;pythagorean</options></input><input type="%s">AND<options>AND&#xD;OR&#xD;NAND&#xD;NOR</options></input><input type="%mult%boolUE"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="truth values"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block></script></block-definition><block-definition s="%&apos;logic system&apos; %&apos;logic operator&apos; %&apos;truth value A&apos; %&apos;truth value B&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">Boolean<options>Boolean&#xD;ternary&#xD;fuzzy (product)&#xD;pythagorean</options></input><input type="%s">AND<options>AND&#xD;OR&#xD;NAND&#xD;NOR</options></input><input type="%boolUE"></input><input type="%boolUE"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="logic operators"/><list><l>show</l><block s="reportNewList"><list><block var="logic system"/><block var="logic operator"/></list></block></list></block></autolambda><list><l>#1</l><l>#2</l></list></block><list><block var="truth value A"/><block var="truth value B"/></list></block></block></script><scripts><script x="87.45703125" y="206.99999999999994"><block s="evaluate"><block s="reifyReporter"><script></script><list></list></block><list></list></block></script><script x="213.912109375" y="201.99999999999994"><block s="evaluate"><block s="reifyReporter"><script></script><list></list></block><list></list></block></script></scripts></block-definition><block-definition s="new table" type="reporter" category="variables"><comment x="0" y="0" w="286" collapsed="false">Reports a newly created table of any order.&#xD;&#xD;The table may subsequently be called with the following&#xD;INPUTS:&#xD;1. request (options: see below)&#xD;2. keys - a list of 1 or more text keys (no numbers allowed!)&#xD;3. data - the item or data structure to be stored&#xD;WHAT IT DOES&#xD;If request = …&#xD;* ”store”: &#xD;  2. keys&#xD;  3. data: will replace any data stored earlier with the same keys. &#xD;TRUE will be reported.&#xD;* ”show”:&#xD;  2. keys&#xD;  If data was stored with the same keys, it will be reported.&#xD;  Otherwise, nothing is reported.&#xD;* ”remove”:&#xD;  2. keys&#xD;  If data was stored with the same keys, it will be removed, and&#xD;  TRUE will be reported; otherwise: FALSE.&#xD;* ”show all”:&#xD;  The full table will be reported.&#xD;* ”reset”:&#xD;  The table will be restored to its initial (empty) state.&#xD;* anything else:&#xD;  An error will be raised.</comment><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="let %upvar be %s"><l>table</l><block s="reportNewList"><list></list></block></custom-block><custom-block s="let %upvar be %s"><l>store</l><block s="reifyScript"><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="sub-keys"/></block></block><script><block s="doReplaceInList"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/><block var="value"/></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><l></l></list></block><script><block s="doAddToList"><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block s="reportNewList"><list></list></block></list></block><block var="sub-table"/></block></script><list></list></block><block s="doReport"><block s="evaluate"><block var="store"/><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><block s="reportCDR"><block var="sub-keys"/></block><block var="value"/></list></block></block></script><list><l>sub-table</l><l>sub-keys</l><l>value</l></list></block></custom-block><custom-block s="let %upvar be %s"><l>show</l><block s="reifyScript"><script><block s="doIf"><block s="reportListIsEmpty"><block var="sub-keys"/></block><script><block s="doReport"><block var="sub-table"/></block></script><list></list></block><block s="doReport"><block s="evaluate"><block var="show"/><list><custom-block s="safely try reporting %anyUE then if %upvar report %anyUE"><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><l>error</l><block var="error"/></custom-block><block s="reportCDR"><block var="sub-keys"/></block></list></block></block></script><list><l>sub-table</l><l>sub-keys</l></list></block></custom-block><custom-block s="let %upvar be %s"><l>remove</l><block s="reifyScript"><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><l></l></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="sub-keys"/></block></block><script><block s="doDeleteFromList"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doReport"><block s="evaluate"><block var="remove"/><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><block s="reportCDR"><block var="sub-keys"/></block></list></block></block></script><list><l>sub-table</l><l>sub-keys</l></list></block></custom-block><custom-block s="let %upvar be %s"><l>show all</l><block s="reifyScript"><script><block s="doReport"><block var="table"/></block></script><list></list></block></custom-block><custom-block s="let %upvar be %s"><l>reset</l><block s="reifyScript"><script><block s="doSetVar"><l>table</l><block s="reportNewList"><list></list></block></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block></custom-block><custom-block s="let %upvar be %s"><l>handlers</l><block s="reportNewList"><list><block s="reportNewList"><list><l>store</l><block var="store"/></list></block><block s="reportNewList"><list><l>show</l><block var="show"/></list></block><block s="reportNewList"><list><l>remove</l><block var="remove"/></list></block><block s="reportNewList"><list><l>show all</l><block var="show all"/></list></block><block s="reportNewList"><list><l>reset</l><block var="reset"/></list></block></list></block></custom-block><block s="doReport"><block s="reifyReporter"><script><block s="doReport"><block s="evaluate"><block s="reportListItem"><block var="request"/><block var="handlers"/></block><list><block var="table"/><block s="reportIfElse"><block s="reportIsA"><block var="keys"/><l><option>list</option></l></block><block var="keys"/><block s="reportNewList"><list><block var="keys"/></list></block></block><block var="data"/></list></block></block></script><list><l>request</l><l>keys</l><l>data</l></list></block></block></script><scripts><script x="657.9391276041667" y="1091.4666666666665"><block var="data"/></script></scripts></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations>ca:prova de forma segura reportant _ i si _ reportant _&#xD;</translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;ca:prova de forma segura _ i si _ _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block var="action"/><block var="handler"/><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="let %&apos;variable&apos; be %&apos;value&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>variable</l><block var="value"/></block></script></block-definition><block-definition s="ignore %&apos;x&apos;" type="command" category="control"><comment x="0" y="0" w="206.66666666666666" collapsed="false">This block does nothing.&#xD;Use it when you are calling a reporter&#xD;for its side effect and don&apos;t care about&#xD;its return value.</comment><header></header><code></code><translations>de:ignoriere _&#xD;ca:ignora _&#xD;es:ignorar _&#xD;fr:ignore _&#xD;pt:ignora _&#xD;</translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="blind call %&apos;function&apos; w/i %&apos;arguments&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%s"></input></inputs><script><block s="doRun"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><block var="arguments"/></block></autolambda><list></list></block><list></list></block></script></block-definition><block-definition s="undecided" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>undecided</l></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="835"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="836"></list></costumes><sounds><list struct="atomic" id="837"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="842"><costumes><list struct="atomic" id="843"></list></costumes><sounds><list struct="atomic" id="844"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714278" y="14.285714285714292"><block s="doSayFor"><custom-block s="fuzzy AND %mult%n %txt"><list><l>0.8</l><l>0.6</l></list><l>product</l></custom-block><l>2</l><comment w="430.4775390625" collapsed="true">These example calls are to prevent block definitions from accidentally being deleted.</comment></block></script><script x="14.285714285714278" y="53.71428571428575"><block s="doSayFor"><custom-block s="fuzzy OR %mult%n %txt"><list><l>0.6</l><l>0.5</l><block s="reportBoolean"><l><bool>false</bool></l></block></list><l>product</l></custom-block><l>2</l></block></script><script x="14.285714285714278" y="97.42857142857147"><block s="doSayFor"><custom-block s="fuzzy NOR %mult%n"><block s="reportNewList"><list><l>0.6</l><l>0.5</l></list></block></custom-block><l>2</l></block></script><script x="14.285714285714278" y="140.1428571428572"><block s="doSayFor"><custom-block s="fuzzy NAND %mult%n"><list><l>2</l></list></custom-block><l>2</l></block></script><script x="14.285714285714278" y="178.8571428571429"><block s="doSayFor"><custom-block s="%n fuzzy XOR %n"><l>0.6</l><l>0.4</l></custom-block><l>2</l></block></script><script x="14.285714285714278" y="217.57142857142856"><block s="doSayFor"><custom-block s="fuzzy NOT %n %txt"><l>0.4</l><l>product</l></custom-block><l>2</l></block></script><script x="14.285714285714278" y="256.99999999999994"><block s="doSayFor"><custom-block s="fuzzy Pythagorean NOT %n"><l>0.6</l></custom-block><l>2</l></block></script><script x="14.285714285714278" y="295.7142857142857"><block s="doSayFor"><custom-block s="fuzzy $arrowRight boolean %n"><l>0.3</l></custom-block><l>2</l></block></script><script x="14.285714285714278" y="334.4285714285715"><block s="doSayFor"><custom-block s="fuzzify %n %n %s %n"><l>15</l><l>25</l><l>wave</l><l>21</l></custom-block><l>2</l></block></script><script x="14.285714285714278" y="373.85714285714295"><custom-block s="fuzzy AND %mult%n %txt"><list><l></l></list><l>product</l><comment w="478" collapsed="false">Logic systems:&#xD;Boolean&#xD;Product&#xD;Pythagorean</comment></custom-block></script><script x="14.285714285714278" y="462.57142857142867"><custom-block s="fuzzy NOT %n %txt"><l></l><l>product</l></custom-block></script></scripts></sprite><sprite name="Sprite(2)" idx="2" x="110" y="5" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="110.97599999999996,0,163.20000000000002,1" pen="tip" id="925"><costumes><list struct="atomic" id="926"></list></costumes><sounds><list struct="atomic" id="927"></list></sounds><blocks></blocks><variables></variables><scripts><script x="20" y="10"><block s="doSetVar"><l>logic operators</l><custom-block s="new table"></custom-block></block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>Boolean</l><l>AND</l></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportVariadicAnd"><list><block var="#1"/><block var="#2"/></list></block></block></script><list><l>#1</l><l>#2</l></list></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>Boolean</l><l>OR</l></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportVariadicOr"><list><block var="#1"/><block var="#2"/></list></block></block></script><list><l>#1</l><l>#2</l></list></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>fuzzy</l><l>AND</l></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="#1"/><block var="#2"/></list></block></block></script><list><l>#1</l><l>#2</l></list></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>fuzzy</l><l>OR</l></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><block s="reportDifference"><l>1</l><block var="#1"/></block><block s="reportDifference"><l>1</l><block var="#2"/></block></list></block></block></block></script><list><l>#1</l><l>#2</l></list></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>ternary</l><l>AND</l></list></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicAnd"><list><block var="#1"/><block var="#2"/></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportIfElse"><block s="reportVariadicOr"><list><block s="reportNot"><block var="#1"/></block><block s="reportNot"><block var="#2"/></block></list></block><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="undecided"></custom-block></block></block></autolambda><list><l>#1</l><l>#2</l></list></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>ternary</l><l>OR</l></list></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicOr"><list><block var="#1"/><block var="#2"/></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportIfElse"><block s="reportVariadicAnd"><list><block s="reportNot"><block var="#1"/></block><block s="reportNot"><block var="#2"/></block></list></block><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="undecided"></custom-block></block></block></autolambda><list><l>#1</l><l>#2</l></list></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>base case</l><l>AND</l></list></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></custom-block><custom-block s="blind call %repRing w/i %mult%s"><block var="logic operators"/><list><l>store</l><block s="reportNewList"><list><l>base case</l><l>OR</l></list></block><block s="reportBoolean"><l><bool>false</bool></l></block></list></custom-block><block s="doReport"><block s="evaluate"><block var="logic operators"/><list><l>show</l><block s="reportNewList"><list><l>Boolean</l><l>AND</l></list></block></list></block></block></script><script x="91" y="750.9166666666664"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><block var="#1"/><block var="#2"/></list></block></autolambda><list><l>#1</l><l>#2</l></list></block><list><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></script><script x="66" y="692.9166666666664"><block s="evaluate"><custom-block s="%s %s %boolUE %boolUE"><l>Boolean</l><l>AND</l><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>false</bool></l></block></custom-block><list></list></block></script></scripts></sprite><watcher var="logic operators" style="normal" x="3" y="5" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="logic operators"><context id="1218"><inputs><input>request</input><input>keys</input><input>data</input></inputs><variables></variables><script><block s="doReport"><block s="evaluate"><block s="reportListItem"><block var="request"/><block var="handlers"/></block><list><block var="table"/><block s="reportIfElse"><block s="reportIsA"><block var="keys"/><l><option>list</option></l></block><block var="keys"/><block s="reportNewList"><list><block var="keys"/></list></block></block><block var="data"/></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><context id="1244"><inputs></inputs><variables><variable name="table"><list id="1246"><item><list id="1247"><item><l>Boolean</l></item><item><list id="1248"><item><list id="1249"><item><l>AND</l></item><item><context id="1250"><inputs><input>#1</input><input>#2</input></inputs><variables></variables><script><block s="doReport"><block s="reportVariadicAnd"><list><block var="#1"/><block var="#2"/></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><context id="1260"><inputs><input><context id="1245"><inputs><input>#1</input><input>#2</input></inputs><variables><ref id="1251"></ref></variables><ref id="1252"></ref><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1260"></ref></context></input></inputs><variables></variables><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin></context></context></item></list></item><item><list id="1262"><item><l>OR</l></item><item><context id="1263"><inputs><input>#1</input><input>#2</input></inputs><variables></variables><script><block s="doReport"><block s="reportVariadicOr"><list><block var="#1"/><block var="#2"/></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1260"></ref></context></item></list></item></list></item></list></item><item><list id="1273"><item><l>fuzzy</l></item><item><list id="1274"><item><list id="1275"><item><l>AND</l></item><item><context id="1276"><inputs><input>#1</input><input>#2</input></inputs><variables></variables><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="#1"/><block var="#2"/></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1260"></ref></context></item></list></item><item><list id="1286"><item><l>OR</l></item><item><context id="1287"><inputs><input>#1</input><input>#2</input></inputs><variables></variables><script><block s="doReport"><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><block s="reportDifference"><l>1</l><block var="#1"/></block><block s="reportDifference"><l>1</l><block var="#2"/></block></list></block></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1260"></ref></context></item></list></item></list></item></list></item><item><list id="1306"><item><l>ternary</l></item><item><list id="1307"><item><list id="1308"><item><l>AND</l></item><item><context id="1309"><inputs><input>#1</input><input>#2</input></inputs><variables></variables><block s="reportIfElse"><block s="reportVariadicAnd"><list><block var="#1"/><block var="#2"/></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportIfElse"><block s="reportVariadicOr"><list><block s="reportNot"><block var="#1"/></block><block s="reportNot"><block var="#2"/></block></list></block><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="undecided"></custom-block></block></block><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1260"></ref></context></item></list></item><item><list id="1339"><item><l>OR</l></item><item><context id="1340"><inputs><input>#1</input><input>#2</input></inputs><variables></variables><block s="reportIfElse"><block s="reportVariadicOr"><list><block var="#1"/><block var="#2"/></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportIfElse"><block s="reportVariadicAnd"><list><block s="reportNot"><block var="#1"/></block><block s="reportNot"><block var="#2"/></block></list></block><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="undecided"></custom-block></block></block><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1260"></ref></context></item></list></item></list></item></list></item><item><list id="1370"><item><l>base case</l></item><item><list id="1371"><item><list id="1372"><item><l>AND</l></item><item><bool>true</bool></item></list></item><item><list id="1373"><item><l>OR</l></item><item><bool>false</bool></item></list></item></list></item></list></item></list></variable><variable name="store"><context id="1374"><inputs><input>sub-table</input><input>sub-keys</input><input>value</input></inputs><variables></variables><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="sub-keys"/></block></block><script><block s="doReplaceInList"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/><block var="value"/></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><l></l></list></block><script><block s="doAddToList"><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block s="reportNewList"><list></list></block></list></block><block var="sub-table"/></block></script><list></list></block><block s="doReport"><block s="evaluate"><block var="store"/><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><block s="reportCDR"><block var="sub-keys"/></block><block var="value"/></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1244"></ref></context></variable><variable name="show"><context id="1446"><inputs><input>sub-table</input><input>sub-keys</input></inputs><variables></variables><script><block s="doIf"><block s="reportListIsEmpty"><block var="sub-keys"/></block><script><block s="doReport"><block var="sub-table"/></block></script><list></list></block><block s="doReport"><block s="evaluate"><block var="show"/><list><custom-block s="safely try reporting %anyUE then if %upvar report %anyUE"><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><l>error</l><block var="error"/></custom-block><block s="reportCDR"><block var="sub-keys"/></block></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1244"></ref></context></variable><variable name="remove"><context id="1479"><inputs><input>sub-table</input><input>sub-keys</input></inputs><variables></variables><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><l></l></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="sub-keys"/></block></block><script><block s="doDeleteFromList"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doReport"><block s="evaluate"><block var="remove"/><list><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="sub-keys"/></block><block var="sub-table"/></block><block s="reportCDR"><block var="sub-keys"/></block></list></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1244"></ref></context></variable><variable name="show all"><context id="1539"><inputs></inputs><variables></variables><script><block s="doReport"><block var="table"/></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1244"></ref></context></variable><variable name="reset"><context id="1544"><inputs></inputs><variables></variables><script><block s="doSetVar"><l>table</l><block s="reportNewList"><list></list></block></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><receiver><ref id="925"></ref></receiver><origin><ref id="925"></ref></origin><ref id="1244"></ref></context></variable><variable name="handlers"><list id="1557"><item><list id="1558"><item><l>store</l></item><item><ref id="1374"></ref></item></list></item><item><list id="1559"><item><l>show</l></item><item><ref id="1446"></ref></item></list></item><item><list id="1560"><item><l>remove</l></item><item><ref id="1479"></ref></item></list></item><item><list id="1561"><item><l>show all</l></item><item><ref id="1539"></ref></item></list></item><item><list id="1562"><item><l>reset</l></item><item><ref id="1544"></ref></item></list></item></list></variable></variables><receiver><ref id="925"></ref></receiver><origin></origin></context></context></variable></variables></scene></scenes></project><media name="Fuzzy logic toolkit" app="Snap! 9.0, https://snap.berkeley.edu" version="2"></media></snapdata>