<snapdata remixID="13223904"><project name="Logic programming" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><notes>AMALOG is a simple, Prolog-like, logic programming language.You, the user / programmer, will describe the problem, and the Amalog interpreter will try to solve it. This is called the "declarative" paradigm.&#xD;&#xD;See inside for examples, and to give it a try!&#xD;&#xD;Questions / remarks: go to the "Logic programmning" topic in the Snap! forum.&#xD;&#xD;v1: Feb. 2, 2024;&#xD;v1.1: Feb. 3, 2024 (error corrections);&#xD;v1.2 , Feb. 5, 2024 (mechanisms for memoizing results, and to prevent infimite loops);&#xD;v1.3, Feb. 6, 2024 (error corrections);&#xD;v1.4, Feb. 9, 2024 (Amalog block, tutorial);&#xD;v1.5, Feb. 10, 2024 (refinements).</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAeAAAAAAeaS0RAAAGb0lEQVR4Ae2dX0hddRzAvzYbumI1tszCsExiF3QNasswC0zHZjZDa7p7CzUf2iKQBRH00nyoHoIKe6iXmNQwROxhtIfAh4hZD7XYg9CfIeSiqJnZ7NbSTe0eV+rVa8zvvt3fPff3uSDcc879fs/v+/l+OOd3zpVzc+YSL+EFAUcErnK0X3YLgXkCCIgITgkgoFP87BwBccApAQR0ip+dIyAOOCWQdgGHh4edFhymnQesut7ql573esM07DWNNe0CXv3bqDx/V470vdgu777WJePj42sasE8fLisrk03rL0r7q8ckp+wx2VYbk643j8rQ0FDWYMhxcSP65UPtcu3JngWIX/+xQaJPHZLvc4tk/5MHFtbz5hKB2qZ2GTx9PhnHdFyad90jkVtvlI59dVJUVJS8PSRLaT8CBlxeeP2IfH52kdDWa/6UL4++JGM9B+WNqhxpadizuJF3qxKYk/B/iZW7anX/44bgCLijYHEHX8XzJHbgWTmzrkiiHQcXN/BOut95/9LRb3ZGym9aL01790j19mKpqqrKCjppF/CbE8fl3Cc9UlLfKtPX3SYPtT4jmzdvzgqY1kUEFyET07ly5LmHpe2JmHX6jMiX9jlgADWYXPOCQEAg7QKCHQJLCTi5CFk6AN77TQAB/e6/8+oR0HkL/B4AAvrdf+fVI6DzFvg9AAT0u//Oq0dA5y3wewAI6Hf/nVePgM5b4PcAENDv/juvHgGdt8DvASCg3/13Xj0COm+B3wNAQL/777x6BHTeAr8HgIB+99959QjovAV+DwAB/e6/8+oR0HkL/B4AAvrdf+fVI6DzFvg9AAT0u//Oq0dA5y3wewAI6Hf/nVef9kdzWFQcPF3h2x8G5K+JYom2tFmkJIcjAqF9MkLfB93y4aedMnNRJHe6XHbXNklxQY1UVlY6QsluNQRCK2BQbMfTtTK9YTCp7t8nRHZua5aCTRHZXd0R2ufmJRWVxQtZOQfMhufmZbFzSaWFcg4YVBCcgoOj3/wpeCpxCt7VJLdsqc6a5+YldSmLF0J5Cl64CPk1cRGyvy2L25P9pYVSwExrC8881HcEAfXskiKPP75TTp4Zk73RNhktKJeGxsak7SykJoCAqbmsee3IyIj0NWyVO/IS94USr3MXRGa310jJ3ffJzTX7JBKJrDmnDwEIaNjlt1/pki0Dh1Nm/Ggscduo7zOpqKhIud3XlQho1PlUR8CZOx+U23dUOTsCBnPTgbxfpPjUz9L2aLNRpbZpENCIZzAH/GL0rDTE2uW7gjJ5pLHJKPOVpen++Jh0Tp0Smbog5afj0vRAjdRMXZ8x3xgh4JX1dz4606+Caw93yuC9y34K48dxab4hIpF1G6Wj/H5n3xhl5TchBk6tKUVYf3ZiLgN+aIkj4JpUC9+HU52Cq89vzJhvjBAwfE5d9ogXL0J+SlyEtFx2XDo/iIDppM2+VhBgDrgCCSvSSQAB00mbfa0gENp/x1pRieGKYO4U/M3Ozko0GjXMTKrlBJgDLifyz3Jvb6/09/fLzMyM5OfnS11dnZSWlmbMDdxVhh261Qj4Hy1rbW2VycnJpE/E4/F5CQsLC6W+vt7ZDdykQYV4gTmgonlzmXAHVzHuTAxhDrhKV4JTcHD0W3oKLikpyZgbuKsMO3SrOQWnaNm/FyGBfLFYLMUnWGVFAAGtSJJHRYA5oAobQVYEENCKJHlUBBBQhY0gKwIIaEWSPCoCCKjCRpAVAQS0IkkeFQEEVGEjyIoAAlqRJI+KAAKqsBFkRQABrUiSR0UAAVXYCLIigIBWJMmjIoCAKmwEWRFAQCuS5FERQEAVNoKsCCCgFUnyqAggoAobQVYEENCKJHlUBBBQhY0gKwIIaEWSPCoCCKjCRpAVAQS0IkkeFQEEVGEjyIoAAlqRJI+KAAKqsBFkRQABrUiSR0UAAVXYCLIigIBWJMmjIoCAKmwEWRFAQCuS5FERQEAVNoKsCCCgFUnyqAggoAobQVYEENCKJHlUBBBQhY0gKwIIaEWSPCoCCKjCRpAVAQS0IkkeFQEEVGEjyIoAAlqRJI+KAAKqsBFkRQABrUiSR0UAAVXYCLIigIBWJMmjIoCAKmwEWRFAQCuS5FERQEAVNoKsCCCgFUnyqAggoAobQVYEENCKJHlUBBBQhY0gKwIIaEWSPCoCCKjCRpAVAQS0IkkeFQEEVGEjyIrA3z3gYye9tfRNAAAAAElFTkSuQmCC</thumbnail><scenes select="1"><scene name="Logic programming"><notes>AMALOG is a simple, Prolog-like, logic programming language.You, the user / programmer, will describe the problem, and the Amalog interpreter will try to solve it. This is called the "declarative" paradigm.&#xD;&#xD;See inside for examples, and to give it a try!&#xD;&#xD;Questions / remarks: go to the "Logic programmning" topic in the Snap! forum.&#xD;&#xD;v1: Feb. 2, 2024;&#xD;v1.1: Feb. 3, 2024 (error corrections);&#xD;v1.2 , Feb. 5, 2024 (mechanisms for memoizing results, and to prevent infimite loops);&#xD;v1.3, Feb. 6, 2024 (error corrections);&#xD;v1.4, Feb. 9, 2024 (Amalog block, tutorial);&#xD;v1.5, Feb. 10, 2024 (refinements).</notes><palette><category name="Logic" color="0,116,143,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="let %&apos;var&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>var</l><block var="value"/></block></script></block-definition><block-definition s="head: %&apos;functor&apos; args %&apos;arguments&apos;" type="reporter" category="Logic"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportCONS"><block var="functor"/><block var="arguments"/></block></block></script></block-definition><block-definition s="rule: %&apos;head&apos; :- %&apos;body&apos;" type="reporter" category="Logic"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="head"/><block var="body"/></list></block></block></script></block-definition><block-definition s="body: %&apos;goals&apos;" type="reporter" category="Logic"><comment x="0" y="0" w="112.00000000000001" collapsed="false">A container for goals. &#xD;Use as &quot;input list&quot; only!</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block var="goals"/></block></script></block-definition><block-definition s="$gears associations from multigoal %&apos;goals&apos; using %&apos;a-list&apos; %&apos;database&apos;" type="reporter" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input><input type="%l"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="goals"/></block><script><block s="doReport"><block s="reportNewList"><list><block var="a-list"/></list></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>updated 1st goal</l><custom-block s="update %l according to %l"><block s="reportListItem"><l>1</l><block var="goals"/></block><block var="a-list"/></custom-block></custom-block><custom-block s="let %upvar be %s"><l>results</l><block s="reportNewList"><list></list></block></custom-block><block s="doForEach"><l>solution</l><custom-block s="$gears solutions %l %l"><block var="updated 1st goal"/><block var="database"/></custom-block><script><custom-block s="let %upvar be %s"><l>a-list updates</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><custom-block s="$gears is %s a variable"><block s="reportListItem"><l>1</l><l/></block></custom-block></autolambda><list></list></block><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><block var="updated 1st goal"/><block var="solution"/></list></block></block></block></custom-block><custom-block s="let %upvar be %s"><l>new a-list</l><block s="reportListAttribute"><l><option>uniques</option></l><block s="reportConcatenatedLists"><list><block var="a-list updates"/><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block var="a-list"/></block></block><custom-block s="update %l according to %l"><block s="reportListItem"><l><option>last</option></l><block s="reportListAttribute"><l><option>columns</option></l><block var="a-list"/></block></block><block var="a-list updates"/></custom-block></list></block></block></list></block></block></custom-block><block s="doForEach"><l>result</l><custom-block s="$gears associations from multigoal %mult%l using %l %s"><block s="reportCDR"><block var="goals"/></block><block var="new a-list"/><block var="database"/></custom-block><script><block s="doAddToList"><block var="result"/><block var="results"/></block></script></block></script></block><block s="doReport"><block s="reportListAttribute"><l><option>uniques</option></l><block var="results"/></block></block></script></block-definition><block-definition s="$gears solutions %&apos;goal&apos; %&apos;database&apos;" type="reporter" category="Logic" helper="true"><comment x="0" y="0" w="232.99999999999997" collapsed="false">Generate all valid solutions for a goal.&#xD;INPUT&#xD;1. Goal = list of 1 or more items. Each item may be a variable or a constant.&#xD;2. Database of clauses.&#xD;OUTPUT&#xD;List of solutions (0, 1 or more). &#xD;Any solution will meet all goals.&#xD;Any solution has the same number of items as the goal.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><custom-block s="log %txt %s"><l>goal</l><block var="goal"/></custom-block><block s="doIf"><block s="reportVariadicNotEquals"><list><custom-block s="%upvar be %s"><l>memoized</l><custom-block s="$flash lookup %s in %l"><block var="goal"/><block var="findings"/></custom-block></custom-block><l></l></list></block><script><custom-block s="log %txt %s"><l>memo</l><block var="memoized"/></custom-block><block s="doReport"><block var="memoized"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="$gears %s of %l"><l>type</l><custom-block s="rule: %l :- %mult%l"><block var="goal"/><list></list></custom-block></custom-block><l>function</l></list></block><script><custom-block s="let %upvar be %s"><l>evaluation</l><custom-block s="$gears evaluate function %l"><block var="goal"/></custom-block></custom-block><custom-block s="log %txt %s"><l>eval</l><block var="evaluation"/></custom-block><block s="doIf"><block s="reportVariadicOr"><list><custom-block s="$gears is %s a variable"><block s="reportListItem"><l><option>last</option></l><block var="goal"/></block></custom-block><block s="reportVariadicEquals"><list><block s="reportListItem"><l><option>last</option></l><block var="goal"/></block><block s="reportListItem"><l><option>last</option></l><block var="evaluation"/></block></list></block></list></block><script><block s="doReport"><block s="reportNewList"><list><block var="evaluation"/></list></block></block></script><list></list></block><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>relevant clauses</l><custom-block s="$gears relevant clauses for %s from %s"><block var="goal"/><block var="database"/></custom-block></custom-block><block s="doAddToList"><block var="goal"/><block var="in progress"/></block><custom-block s="let %upvar be %s"><l>solutions</l><block s="reportNewList"><list></list></block></custom-block><block s="doForEach"><l>clause</l><block var="relevant clauses"/><script><custom-block s="let %upvar be %s"><l>associations</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicAnd"><list><custom-block s="$gears is %s a variable"><block s="reportListItem"><l>1</l><l/></block></custom-block><block s="reportNot"><custom-block s="$gears is %s a variable"><block s="reportListItem"><l><option>last</option></l><l/></block></custom-block></block></list></block></autolambda><list></list></block><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><custom-block s="$gears %s of %l"><l>head</l><block var="clause"/></custom-block><block var="goal"/></list></block></block></block></custom-block><custom-block s="let %upvar be %s"><l>sub-associations</l><custom-block s="$gears associations from multigoal %mult%l using %l %s"><custom-block s="$gears %s of %l"><l>tail</l><block var="clause"/></custom-block><block var="associations"/><block var="database"/></custom-block></custom-block><block s="doForEach"><l>sub-association list</l><block var="sub-associations"/><script><block s="doAddToList"><custom-block s="update %l according to %l"><custom-block s="$gears %s of %l"><l>head</l><block var="clause"/></custom-block><block var="sub-association list"/></custom-block><block var="solutions"/></block></script></block></script></block><custom-block s="let %upvar be %s"><l>results</l><block s="reportListAttribute"><l><option>uniques</option></l><block var="solutions"/></block></custom-block><block s="doAddToList"><block s="reportNewList"><list><block var="goal"/><block var="results"/></list></block><block var="findings"/><comment w="152" collapsed="true">Memoize search results.</comment></block><block s="doDeleteFromList"><l><option>last</option></l><block var="in progress"/></block><custom-block s="log %txt %s"><l>regoal</l><block var="goal"/></custom-block><custom-block s="log %txt %s"><l>results</l><block var="results"/></custom-block><block s="doReport"><block var="results"/></block></script></block-definition><block-definition s="$gears is %&apos;parameter&apos; a variable" type="predicate" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="parameter"/><l><option>text</option></l></block><block s="reportVariadicEquals"><list><block s="reportLetter"><l>1</l><block var="parameter"/></block><l>?</l></list></block></list></block></block></script></block-definition><block-definition s="$gears %&apos;attribute&apos; of %&apos;clause&apos;" type="reporter" category="Logic" helper="true"><comment x="0" y="0" w="234.99999999999986" collapsed="false">Reports the head, type or tail of a clause.&#xD;HOW&#xD;A clause has a head (list) and a tail (list of lists).&#xD;If the head&apos;s first item (functor) is a Snap! script, type = function. Else, if the tail is empty, type = fact. Else, type = rule.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">head<options>head&#xD;type&#xD;tail</options></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="attribute"/><l>head</l></list></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="clause"/></block></block></script><list><block s="reportVariadicEquals"><list><block var="attribute"/><l>type</l></list></block><script><block s="doReport"><block s="reportIfElse"><custom-block s="$gears is %l a function"><custom-block s="$gears %s of %l"><l>head</l><block var="clause"/></custom-block></custom-block><l>function</l><block s="reportIfElse"><block s="reportListIsEmpty"><block s="reportListItem"><l><option>last</option></l><block var="clause"/></block></block><l>fact</l><l>rule</l></block></block></block></script><block s="reportVariadicEquals"><list><block var="attribute"/><l>tail</l></list></block><script><block s="doReport"><block s="reportListItem"><l><option>last</option></l><block var="clause"/></block></block></script></list></block><custom-block s="error %txt"><block s="reportJoinWords"><list><l>No such attribute: </l><block var="attribute"/></list></block></custom-block></script></block-definition><block-definition s="$gears matchable %&apos;goal&apos; %&apos;head&apos;" type="predicate" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="head"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="goal"/></block></list></block><block s="reportVariadicAnd"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><custom-block s="$gears is %s a variable"><block s="reportListItem"><l>1</l><l/></block></custom-block><custom-block s="$gears is %s a variable"><block s="reportListItem"><l><option>last</option></l><l/></block></custom-block><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l><option>last</option></l><l/></block></list></block></list></block></autolambda><list></list></block><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><block var="goal"/><block var="head"/></list></block></block></block></block></list></block></block></script></block-definition><block-definition s="$gears evaluate function %&apos;goal&apos;" type="reporter" category="Logic" helper="true"><comment x="0" y="0" w="201.39718191964303" collapsed="false">Evaluate a function using a Snap! script (reporter or predicate)&#xD;INPUT list&#xD;1. Snap! function&#xD;2..(n-1). Arguments&#xD;n. may be anything&#xD;OUTPUT list&#xD;1..(n-1) same as input&#xD;n. Result&#xD;EXAMPLE&#xD;EVALUATE FUNCTION ([+], 2, 3, ?r) =&gt; ([+], 2, 3, 5)&#xD;If however the script is a command, it is executed like above, and TRUE is returned.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="goal"/></block><l><option>command</option></l></block><script><block s="doRun"><block s="reportListItem"><l>1</l><block var="goal"/></block><list><custom-block s="first nor last of %s"><block var="goal"/></custom-block></list></block><block s="doReport"><block s="reportConcatenatedLists"><list><custom-block s="all but last of %s"><block var="goal"/></custom-block><block s="reportNewList"><list><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></list></block></block></script><list></list></block><block s="doReport"><block s="reportConcatenatedLists"><list><custom-block s="all but last of %s"><block var="goal"/></custom-block><block s="reportNewList"><list><block s="evaluate"><block s="reportListItem"><l>1</l><block var="goal"/></block><custom-block s="first nor last of %s"><block var="goal"/></custom-block></block></list></block></list></block></block></script></block-definition><block-definition s="all but last of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><block var="data"/></block></block></block></block></script></block-definition><block-definition s="$gears is %&apos;clause&apos; a function" type="predicate" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="clause"/></block><l><option>script</option></l></block></block></script></block-definition><block-definition s="update %&apos;data&apos; according to %&apos;a-list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><custom-block s="let %upvar be %s"><l>result</l><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="update %s according to %l"><l></l><block var="a-list"/></custom-block></autolambda><list></list></block><block var="data"/></block></custom-block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="update %&apos;item&apos; according to %&apos;a-list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="value"/><l></l></list></block><block var="item"/><block var="value"/></block></autolambda><list><l>value</l></list></block><list><custom-block s="$flash lookup %s in %l"><block var="item"/><block var="a-list"/></custom-block></list></block></block></script></block-definition><block-definition s="first nor last of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block var="data"/></block></block></block></block></block></script></block-definition><block-definition s="goal: %&apos;functor&apos; args %&apos;arguments&apos;" type="reporter" category="Logic"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportCONS"><block var="functor"/><block var="arguments"/></block></block></script></block-definition><block-definition s="fact %&apos;functor&apos; args %&apos;arguments&apos;" type="reporter" category="Logic"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportCONS"><block var="functor"/><block var="arguments"/></block><block s="reportNewList"><list></list></block></list></block></block></script></block-definition><block-definition s="$gears relevant clauses for %&apos;goal&apos; from %&apos;database&apos;" type="reporter" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="let %upvar be %s"><l>matching clauses</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><custom-block s="$gears matchable %l %l"><block var="goal"/><custom-block s="$gears %s of %l"><l>head</l><block var="clause"/></custom-block></custom-block></autolambda><list><l>clause</l></list></block><block var="database"/></block></custom-block><custom-block s="let %upvar be %s"><l>matching facts</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><custom-block s="$gears %s of %l"><l>type</l><l/></custom-block><l>fact</l></list></block></autolambda><list></list></block><block var="matching clauses"/></block></custom-block><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicAnd"><list><custom-block s="$gears no variables in %l"><block var="goal"/></custom-block><block s="reportNot"><block s="reportListIsEmpty"><block var="matching facts"/></block></block></list></block><block s="reportListContainsItem"><block var="in progress"/><block var="goal"/></block></list></block><script><block s="doReport"><block var="matching facts"/></block></script><list></list></block><block s="doReport"><block var="matching clauses"/></block></script></block-definition><block-definition s="$gears no variables in %&apos;head&apos;" type="predicate" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportNot"><block s="reportVariadicOr"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="$gears is %s a variable"><l></l></custom-block></autolambda><list></list></block><block var="head"/></block></block></block></block></script></block-definition><block-definition s="%&apos;variable&apos; be %&apos;value&apos;" type="reporter" 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><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="$gears reset findings and work in progress" type="command" category="Logic" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>findings</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>in progress</l><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="$flash lookup %&apos;key&apos; in %&apos;dictionary&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="key"/><l><option>text</option></l></block><script><block s="doReport"><block s="reportListItem"><block var="key"/><block var="dictionary"/></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="%upvar be %s"><l>kv-pair</l><custom-block s="$flash assoc %s %l"><block var="key"/><block var="dictionary"/></custom-block></custom-block><l></l></list></block><script><block s="doReport"><l></l></block></script><list></list></block><block s="doReport"><block s="reportListItem"><l>2</l><block var="kv-pair"/></block></block></script></block-definition><block-definition s="%&apos;text&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs></block-definition><block-definition s="$speechBubbleOutline %&apos;paragraph&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mult%mlt"></input></inputs></block-definition><block-definition s="cut" type="reporter" category="Logic"><comment x="0" y="0" w="288.5714285714286" collapsed="false">To be used as a goal within a rule’s body. Stops further execution of the body; an empty list (or false) will be reported.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list></list></block></list></block></block></script></block-definition><block-definition s="dummy clause" type="reporter" category="Logic"><comment x="0" y="0" w="247.14285714285717" collapsed="false">May be used as a placeholder for a fact or rule within a clause list. Has no effect on program’s results</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list></list></block></list></block></block></script></block-definition><block-definition s="dummy goal" type="reporter" category="Logic"><comment x="0" y="0" w="225.71428571428572" collapsed="false">May be used as a placeholder for a goal within a rule’s body. Has no effect on program’s results</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="AMALOG program id: %&apos;id&apos; $nl ‎ ‎ $nl comments: %&apos;comments&apos; $nl ‎ $nl facts: %&apos;facts&apos; $nl ‎ $nl rules: %&apos;rules&apos; $nl ‎ $nl goal: %&apos;goal&apos;" type="reporter" category="Logic"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input><input type="%mult%mlt"></input><input type="%mult%l"></input><input type="%mult%l"></input><input type="%l"></input></inputs><script><custom-block s="$gears reset findings and work in progress"></custom-block><block s="doSetVar"><l>log</l><block s="reportNewList"><list></list></block></block><custom-block s="let %upvar be %s"><l>result</l><custom-block s="$gears solutions %l %l"><block var="goal"/><block s="reportConcatenatedLists"><list><block var="facts"/><block var="rules"/><block s="reportNewList"><list><block s="reportNewList"><list><block s="reportNewList"><list></list></block><block s="reportNewList"><list></list></block></list></block></list></block></list></block></custom-block></custom-block><block s="doIf"><block s="reportListIsEmpty"><block var="result"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="result"/></block><l>1</l></list></block><block s="reportNot"><block s="reportVariadicOr"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="$gears is %s a variable"><l></l></custom-block></autolambda><list></list></block><block var="goal"/></block></block></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></list></block><block s="doReport"><block s="reportListAttribute"><l><option>sorted</option></l><block var="result"/></block></block></script></block-definition><block-definition s="log %&apos;type&apos; %&apos;data&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input></inputs><script><block s="doAddToList"><block s="reportCONS"><block var="type"/><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><custom-block s="deep map %repRing over %l"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>script</option></l></block><block s="reportBlockAttribute"><l><option>label</option></l><block s="reifyReporter"><script></script><list></list></block></block><l></l></block></autolambda><list></list></block><l/></custom-block></custom-block></autolambda><list></list></block><block var="data"/></block></block><block var="log"/></block></script></block-definition><block-definition s="$flash assoc %&apos;key&apos; %&apos;a-list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="289.3333333333333" collapsed="false">The second input is an &quot;association list,&quot; a list of two-item lists.  Each of those smaller lists has a &quot;key&quot; as its first item and a &quot;value&quot; as its second.  ASSOC reports the first key-value pair in the association list whose key matches the first input.</comment><header></header><code></code><translations>ca:associació _ _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block var="key"/><block s="reportListItem"><l>1</l><l/></block></list></block></autolambda><list></list></block><block var="a-list"/></block></block></script></block-definition><block-definition s="%&apos;#&apos; for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><comment x="0" y="0" w="228.57142857142858" collapsed="false">This block carries out the given script for each item of the given list, like the primitive FOR EACH.&#xD;&#xD;What&apos;s different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.</comment><header></header><code></code><translations>ca:_ per cada _ de _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doForEach"><l>inner item</l><block var="data"/><script><block s="doSetVar"><l>item</l><block var="inner item"/></block><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations>ca:frase _&#xD;</translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="$flash zip %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="191.99999999999997" collapsed="false">ZIP takes any number of lists as inputs.  The lists should all be the same length.  ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc.&#xD;Viewing the inputs as the rows of a matrix, ZIP reports its transpose.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>columns</option></l><block var="lists"/></block></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="196" collapsed="false">Takes a sentence in text string form and reports the sentence as a list of its words.</comment><header></header><code></code><translations>de:Satz $arrowRight Liste _&#xD;ca:frase $arrowRight llista _&#xD;es:frase $arrowRight lista _&#xD;fr:phrase $arrowRight liste _&#xD;pt:uma lista com as palavras da frase _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><l></l></block><l>0</l></list></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>whitespace</option></l></block></block></block></script></block-definition><block-definition s="reshape as %&apos;shape&apos; $⍴-1-255-255-0 items of %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="180" collapsed="false">The first input is a shape list as in&#xD;SHAPE OF.  The output is an array with those dimensions containing  the atomic items of the second input,&#xD;repeating values if more are needed.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportReshape"><block var="data"/><block var="shape"/></block></block></script></block-definition><block-definition s="shape of $⍴-1-255-255-0 %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="310" collapsed="false">Reports a flat list of the maximum size of the input array along&#xD;each dimension: number of rows, number of columns, etc.&#xD;&quot;Maximum&quot; because it works even if the array isn&apos;t uniformly shaped.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>dimensions</option></l><block var="data"/></block></block></script></block-definition><block-definition s="max %&apos;a&apos; $⌈-1-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="150.66666666666666" collapsed="false">Reports the greater of its two inputs. Works on strings too.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicMax"><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="flatten (ravel) $,-1-255-255-0 %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="216" collapsed="false">Reports a flat list of all the atomic elements &#xD;of sublists of the input list.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>flatten</option></l><block var="data"/></block></block></script></block-definition><block-definition s="rank of $⍴⍴-1-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="240.00000000000003" collapsed="true">Reports the number of dimensions of the input.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>rank</option></l><block var="array"/></block></block></script></block-definition><block-definition s="inner product helper with %&apos;plus&apos; . %&apos;times&apos; %&apos;a&apos; $nl transposed %&apos;tb&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%repRing"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="a"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="a"/></block></block><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportCONS"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="generalized dotproduct %l %l with sum %repRing product %repRing"><block s="reportListItem"><l>1</l><block var="a"/></block><l/><block var="plus"/><block var="times"/></custom-block></autolambda><list></list></block><block var="tb"/></block><custom-block s="inner product helper with %repRing . %repRing %l %br transposed %l"><block var="plus"/><block var="times"/><block s="reportCDR"><block var="a"/></block><block var="tb"/></custom-block></block></block></script><list></list></block><block s="doReport"><block s="reportCONS"><custom-block s="inner product helper with %repRing . %repRing %l %br transposed %l"><block var="plus"/><block var="times"/><block s="reportListItem"><l>1</l><block var="a"/></block><block var="tb"/></custom-block><custom-block s="inner product helper with %repRing . %repRing %l %br transposed %l"><block var="plus"/><block var="times"/><block s="reportCDR"><block var="a"/></block><block var="tb"/></custom-block></block></block></script></block-definition><block-definition s="transpose $⍉-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="168" collapsed="false">Takes a multidimensional array, and&#xD;reports an array whose dimensions&#xD;are reversed (as reported by&#xD;SHAPE OF).  In the case of a&#xD;two-dimensional array, does the usual transposition of rows and columns.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>dta_transpose(list)</l><list><block var="array"/></list></block></block></script></block-definition><block-definition s="reverse row order (column contents) $⦵-1.5-255-255-0 %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="286" collapsed="false">Reverses the order of the (toplevel) items of the input.&#xD;&#xD;If the input is a matrix, this means it reverses the order of the rows, which is a reflection through a horizontal axis, as the ⦵ symbol suggests.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>reverse</option></l><block var="list"/></block></block></script></block-definition><block-definition s="multimap %&apos;function&apos; %&apos;data&apos;" type="reporter" category="other" helper="true"><comment x="0" y="0" w="215.33333333333331" collapsed="false">Like MAP, but can take any number of lists&#xD;as inputs.  The lists must all be the same size.&#xD;The function input must take a number of inputs&#xD;equal to the number of lists.  MULTIMAP calls&#xD;the function with all the first items, then all the&#xD;second items, and so on.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>lengths</l><l>cols</l></list></block><block s="doSetVar"><l>lengths</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListAttribute"><l><option>length</option></l><l/></block></autolambda><list></list></block><block var="data"/></block></block><block s="doFor"><l>i</l><l>2</l><block s="reportListAttribute"><l><option>length</option></l><block var="lengths"/></block><script><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="lengths"/></block><block s="reportListItem"><block var="i"/><block var="lengths"/></block></list></block></block><script><custom-block s="error %txt"><l>Non-conforming shapes.</l></custom-block></script><list></list></block></script></block><block s="doSetVar"><l>cols</l><block s="reportListAttribute"><l><option>columns</option></l><block var="data"/></block></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><custom-block s="%s"><l></l></custom-block></block></autolambda><list></list></block><block var="cols"/></block></block></script></block></script></block-definition><block-definition s="generalized dotproduct %&apos;a&apos; %&apos;b&apos; with sum %&apos;sum&apos; product %&apos;product&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="reportCombine"><custom-block s="multimap %repRing %mult%l"><block var="product"/><list><block var="a"/><block var="b"/></list></custom-block><block var="sum"/></block></block></script></block-definition><block-definition s="inner product %&apos;a&apos; %&apos;plus&apos; $.-1-255-255-0 %&apos;times&apos; %&apos;b&apos;" type="reporter" category="lists"><comment x="0" y="0" w="252.66666666666666" collapsed="false">Computes a generalized matrix multiplication.&#xD;&#xD;In normal matrix multiplication, each cell of the result&#xD;is computed by multiplying individual numbers within&#xD;a row of the left input and a column of the right input,&#xD;and then adding those products.  In APL terms this is&#xD;+.× (&quot;plus dot times&quot;)&#xD;Any dyadic functions can replace addition and multiplication in this algorithm; a common case is&#xD;∨.∧ (&quot;or dot and&quot;)</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="a"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>a</l><block s="reportNewList"><list><block var="a"/></list></block></block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="b"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>b</l><block s="reportNewList"><list><block var="b"/></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListItem"><l><option>last</option></l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="a"/></custom-block></block><l>1</l></list></block><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="b"/></custom-block></block><l>1</l></list></block></list></block><script><block s="doDeclareVariables"><list><l>ta</l></list></block><block s="doSetVar"><l>ta</l><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="a"/></custom-block></block><block s="doSetVar"><l>a</l><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block var="ta"/></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="b"/></custom-block></block></block></block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l><option>last</option></l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="a"/></custom-block></block><l>1</l></list></block><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="b"/></custom-block></block><l>1</l></list></block></list></block><script><block s="doSetVar"><l>b</l><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block var="b"/></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListItem"><l><option>last</option></l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="a"/></custom-block></block></block></block></block></script><list></list></block><block s="doReport"><custom-block s="inner product helper with %repRing . %repRing %l %br transposed %l"><block var="plus"/><block var="times"/><block var="a"/><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="b"/></custom-block></custom-block></block></script></block-definition><block-definition s="min %&apos;a&apos; $⌊-1.2-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.33333333333334" collapsed="true">Reports the smaller of its two inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicMin"><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="combine in rows (reduce by column vectors) %&apos;func&apos; $/-1-255-255-0 %&apos;stuff&apos;" type="reporter" category="lists"><comment x="0" y="0" w="288.6666666666667" collapsed="false">This function has two names because there are two ways&#xD;to understand it.&#xD;&#xD;Lisp way:  A matrix is a list of rows.  This block combines the numbers in each row, producing one value for the entire row.&#xD;&#xD;APL way:  A matrix is made of vectors.  This block takes each column as a vector, and does vector arithmetic on the columns, producing one column as the result.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="stuff"/></custom-block><l>1</l></list></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block var="func"/><l/></custom-block></autolambda><list></list></block><block var="stuff"/></block></block></script><script><block s="doReport"><block s="reportCombine"><block var="stuff"/><block var="func"/></block></block></script></block></script></block-definition><block-definition s="%&apos;howmany&apos; deal helper %&apos;data&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="howmany"/><l>0</l></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doDeclareVariables"><list><l>choices</l><l>index</l></list></block><block s="doSetVar"><l>choices</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="howmany"/><script><block s="doSetVar"><l>index</l><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block><block s="doAddToList"><block s="reportListItem"><block var="index"/><block var="data"/></block><block var="choices"/></block><block s="doDeleteFromList"><block var="index"/><block var="data"/></block></script></block><block s="doReport"><block var="choices"/></block></script></block></script></block-definition><block-definition s="signum $×-1-255-255-0 %&apos;num&apos;" type="reporter" category="operators"><comment x="0" y="0" w="159.99999999999997" collapsed="false">Reports 1 if the input is positive,&#xD;0 if the input is zero,&#xD;or -1 if the input is negative.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="num"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="signum $×-1-255-255-0 %n"><l></l></custom-block></autolambda><list></list></block><block var="num"/></block></block></script><list></list></block><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>0</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><block var="num"/></block><script><block s="doReport"><l>0</l></block></script><list></list></block><block s="doReport"><block s="reportQuotient"><block var="num"/><block s="reportMonadic"><l><option>abs</option></l><block var="num"/></block></block></block></script></block-definition><block-definition s="reciprocal $÷-1-255-255-0 %&apos;num&apos;" type="reporter" category="operators"><comment x="0" y="0" w="102.66666666666666" collapsed="false">reports 1 divided&#xD;by its input.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><l>1</l><block var="num"/></block></block></script></block-definition><block-definition s="roll $?-1-255-255-0 %&apos;num&apos;" type="reporter" category="operators"><comment x="0" y="0" w="180.66666666666666" collapsed="false">This block reports a random integer between 1 and its input.  To roll more than one die, use (for three dice)&#xD;roll (reshape as 3 items of 6)&#xD;APL:  ?3⍴6&#xD;Don&apos;t use reshape as 3 items of (roll 6), because that would roll one die and report 3 copies of the same random roll. </comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportRandom"><l>1</l><block var="num"/></block></block></script></block-definition><block-definition s="scalar? %&apos;x&apos;" type="predicate" category="other" helper="true"><comment x="0" y="0" w="199.33333333333334" collapsed="false">Reports True if the input is an APL scalar,&#xD;i.e., either an atomic (non-list) value, or&#xD;an array (list of lists) of any depth with only&#xD;one atomic item, e.g., (list (list (list (3)))).</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportAtomicCombine"><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="x"/></custom-block><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l></l></list></block></autolambda><list></list></block></block><l>1</l></list></block></block></script></block-definition><block-definition s="scalar-value helper %&apos;x&apos;" type="reporter" category="other" helper="true"><comment x="0" y="0" w="200.66666666666663" collapsed="false">The input must be a value for which SCALAR? reports true, i.e., either an atom or a list of any depth but only one scalar item of item of... etc.  This function returns the underlying scalar (number, etc.).</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="x"/></block></script><list></list></block><block s="doReport"><custom-block s="scalar-value helper %s"><block s="reportListItem"><l>1</l><block var="x"/></block></custom-block></block></script></block-definition><block-definition s="NAND %&apos;a&apos; $⍲-1.4-255-255-0 %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="198.66666666666669" collapsed="false">Reports the not-and of its inputs, in the form&#xD;0 for false, 1 for true.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="NOT $&#126;-1-255-255-0 %s"><custom-block s="LCM (and) %n $∧-1.2-255-255-0 %n"><block var="a"/><block var="b"/></custom-block></custom-block></block></script></block-definition><block-definition s="NOR %&apos;a&apos; $⍱-1.4-255-255-0 %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="198.66666666666669" collapsed="false">Reports the not-and of its inputs, in the form&#xD;0 for false, 1 for true.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="NOT $&#126;-1-255-255-0 %s"><custom-block s="GCD (or) %n $∨-1.2-255-255-0 %n"><block var="a"/><block var="b"/></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;a&apos; ≤ %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="151.33333333333334" collapsed="true">Reports True if the left input is&#xD;less than or equal to the right input.&#xD;&#xD;Reports a Snap! Boolean, not an integer 0 or 1.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicLessThanOrEquals"><list><block var="a"/><block var="b"/></list></block><comment w="176.66666666666666" collapsed="true">This is the primitive version.</comment></block></script></block-definition><block-definition s="%&apos;a&apos; ≥ %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="152.66666666666666" collapsed="false">Reports True if the left input is&#xD;greater than than or equal to&#xD;the right input.&#xD;&#xD;Reports a Snap! Boolean, not an integer 0 or 1.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicGreaterThanOrEquals"><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="XOR %&apos;a&apos; $≠-1-255-255-0 %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="190" collapsed="false">Reports False if its inputs are equal;&#xD;reports True if its inputs are not equal.&#xD;The inputs can have any non-list values.&#xD;(Lists are hyperized.)  If the inputs are&#xD;Booleans (True/False or 1/0), this is&#xD;also the exclusive-or function.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s scalar %s %s"><block var="a"/><l>≠</l><block var="b"/></custom-block></block></script></block-definition><block-definition s="zero? %&apos;n&apos;" type="predicate" category="other" helper="true"><comment x="0" y="0" w="202.66666666666666" collapsed="true">reports True iff the input is 0 or False.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportListContainsItem"><block s="reportNewList"><list><l>0</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><block var="n"/></block></block></script></block-definition><block-definition s="truth %&apos;n&apos;" type="predicate" category="other" helper="true"><comment x="0" y="0" w="198.66666666666669" collapsed="false">Reports a Snap! Boolean False if the input&#xD;is False or 0; reports True otherwise.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="truth %s"><l></l></custom-block></autolambda><list></list></block><block var="n"/></block></block></script><list></list></block><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="n"/><l><option>Boolean</option></l></block><block var="n"/><block s="reportNot"><block s="reportVariadicEquals"><list><block var="n"/><l>0</l></list></block></block></block></block></script></block-definition><block-definition s="make scalar %&apos;value&apos;" type="reporter" category="operators" helper="true"><comment x="0" y="0" w="242.66666666666666" collapsed="false">Turns list of list of ... a single scalar (e.g., ((((x)))) ) into just the scalar.  Error if called with anything else.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><custom-block s="scalar? %s"><block var="value"/></custom-block><script><block s="doReport"><custom-block s="scalar-value helper %s"><block var="value"/></custom-block></block></script><list></list></block><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Make scalar called with non-singleton input </l><block var="value"/></list></block></custom-block></script></block-definition><block-definition s="$⍳-1.5-255-255-0 %&apos;n&apos;" type="reporter" category="lists"><comment x="0" y="0" w="290.6666666666667" collapsed="false">If the input is a positive integer, reports a list of the numbers&#xD;from 1 to that input.  (If the input is 0, reports an empty list.)&#xD;&#xD;If the input is a list of positive integers, reports an array with&#xD;the shape specified by the input (as in ⍴ reshape) in which&#xD;each item is a list of the indices of that item in the array&#xD;(so technically the shape has one more dimension&#xD;than the input, whose size is the size of the input).&#xD;&#xD;If the input is a list that includes 0, the result is an array whose shape is the part of the input list before the 0, in which every element is empty.  If you&apos;d like some other value in every element, MD-MAP a constant function over the result.&#xD;&#xD;For list inputs, the size of the result grows very quickly, more or less the factorial of the size of the input.  Snap! will not attempt to compute a result bigger than a few million atomic items.&#xD;⍳(⍳ 9) will work (≈ 3 million atoms) but ⍳(⍳ 10) will give an error.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="n"/></custom-block><l>1</l></list></block><script><block s="doIfElse"><block s="reportListContainsItem"><block var="n"/><l>0</l></block><script><block s="doReport"><block s="reportReshape"><block s="reportNewList"><list></list></block><block s="reportListItem"><block s="reportNumbers"><l>1</l><block s="reportDifference"><block s="reportListIndex"><l>0</l><block var="n"/></block><l>1</l></block></block><block var="n"/></block></block></block></script><script><block s="doReport"><block s="reportReshape"><custom-block s="crossproduct %mult%l"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportNumbers"><l>1</l><l></l></block></autolambda><list></list></block><block var="n"/></block></custom-block><block s="reportConcatenatedLists"><list><block var="n"/><block s="reportNewList"><list><block s="reportListAttribute"><l><option>length</option></l><block var="n"/></block></list></block></list></block></block></block></script></block></script><script><custom-block s="error %txt"><l>Input to ⍳ can&apos;t be a list of lists.</l></custom-block></script></block></script><script><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="n"/></custom-block><block s="reportNewList"><list></list></block><block s="reportNumbers"><l>1</l><block var="n"/></block></block></block></script></block></script></block-definition><block-definition s="where in %&apos;vector&apos; is $⍳-1.5-255-255-0 %&apos;items&apos;" type="reporter" category="lists"><comment x="0" y="0" w="334.6666666666667" collapsed="false">If the rank of the left input is one more than the rank of the right input,&#xD;reports the index of the right input in the left input, or if not found,&#xD;reports one more than the length of the left input.&#xD;&#xD;If the rank of the left input is equal to the rank of the right input,&#xD;reports a vector of the indices of the items of the right input&#xD;in the left input (mapping this function over the right input).&#xD;&#xD;If the rank of the left input is more than that of the right input by 2 or more,&#xD;reports a vector, the location of the right input in the left in each dimension.&#xD;&#xD;It is an error if the rank of the left input is less than that of the right input.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doIf"><block s="reportVariadicLessThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vector"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="items"/></custom-block></list></block><script><custom-block s="error %txt"><l>Left input to ⍳ must have greater or equal rank to right input.</l></custom-block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vector"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="items"/></custom-block></list></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="where in %l is $⍳-1.5-255-255-0 %s"><block var="vector"/><l></l></custom-block></autolambda><list></list></block><block var="items"/></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vector"/></custom-block><block s="reportVariadicSum"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="items"/></custom-block><l>1</l></list></block></list></block><script><block s="doSetVar"><l>result</l><block s="reportListIndex"><block var="items"/><block var="vector"/></block></block><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="result"/></custom-block><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="vector"/></block><l>1</l></list></block><block var="result"/></block></block></script><list></list></block><block s="doSetVar"><l>result</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><custom-block s="%l deep contains %s"><l/><block var="items"/></custom-block></autolambda><list></list></block><block var="vector"/></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="result"/><l></l></list></block><script><block s="doReport"><block s="reportVariadicSum"><list><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="vector"/></custom-block><l>1</l></list></block></block></script><list></list></block><block s="doReport"><block s="reportCONS"><block s="reportListIndex"><block var="result"/><block var="vector"/></block><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><custom-block s="where in %l is $⍳-1.5-255-255-0 %s"><block var="result"/><block var="items"/></custom-block></custom-block></block></block></script></block-definition><block-definition s="crossproduct %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="305.3333333333333" collapsed="false">This isn&apos;t an APL function, although it&apos;s related to the outer product.&#xD;&#xD;It takes any number of lists, and reports a list of all possible tuples with one item from each of the lists.  The length of the result is the product of the lengths of the inputs.&#xD;&#xD;The result gets very big very quickly.  Snap! will refuse to do this computation if the result would be more than a few million atomic items.  (crossproduct (⍳(⍳9))) makes about 3 million atomic items; (crossproduct (⍳(⍳10))) gives an error message.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>dta_crossproduct(list)</l><list><block var="lists"/></list></block></block></script></block-definition><block-definition s="%&apos;array&apos; deep contains %&apos;value&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="array"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportListContainsItem"><block var="array"/><block var="value"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doReport"><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><l/><l/></list></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%l deep contains %s"><l/><block var="value"/></custom-block></autolambda><list></list></block><block var="array"/></block></custom-block></block></script></block-definition><block-definition s="which of %&apos;items&apos; $ϵ-1-255-255-0 contained in %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="214.66666666666666" collapsed="false">Reports an array of Booleans the same shape&#xD;as the left input, indicating which of the atoms&#xD;in the left input appear anywhere in the right&#xD;input.  &#xD;(The structure of the right input doesn&apos;t matter.)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="items"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><custom-block s="which of %s $ϵ-1-255-255-0 contained in %l"><l></l><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><block var="array"/></custom-block></custom-block></autolambda><list></list></block><block var="items"/></block></block></script><script><block s="doReport"><block s="reportListContainsItem"><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><block var="array"/></custom-block><block var="items"/></block></block></script></block></script></block-definition><block-definition s="catenate %&apos;left&apos; $,-1-255-255-0 %&apos;right&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Like append, but:&#xD;&#xD;A scalar input is treated as an array the same shape as the other input except that the last item of the shape is 1.&#xD;&#xD;If the two inputs are of different ranks,&#xD;the function is mapped over the larger ranked input.&#xD;&#xD;Catenate adds new columns, by appending to each row.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="left"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block><l>1</l></list></block><script><block s="doSetVar"><l>left</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>-1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="right"/></custom-block></custom-block><block s="reportNewList"><list><l>1</l></list></block></list></block><block s="reportNewList"><list><block var="left"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>left</l><block s="reportNewList"><list><block var="left"/></list></block></block></script></block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="right"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></list></block><script><block s="doSetVar"><l>right</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>-1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="left"/></custom-block></custom-block><block s="reportNewList"><list><l>1</l></list></block></list></block><block s="reportNewList"><list><block var="right"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>right</l><block s="reportNewList"><list><block var="right"/></list></block></block></script></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></list></block><script><block s="doIfElse"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></list></block><script><block s="doReport"><block s="reportConcatenatedLists"><list><block var="left"/><block var="right"/></list></block></block></script><script><block s="doReport"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="left"/><block var="right"/></list></custom-block></block></script></block></script><list></list></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></list></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><block var="left"/><l></l></custom-block></autolambda><list></list></block><block var="right"/></block></block></script><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><block var="right"/></custom-block></autolambda><list></list></block><block var="left"/></block></block></script></block></script></block-definition><block-definition s="scalar value %&apos;value&apos;" type="reporter" category="lists"><comment x="0" y="0" w="221.33333333333334" collapsed="false">If the input is a nesting of length=1 lists, which&#xD;APL treats as a scalar (the innermost item)&#xD;for many purposes, report that innermost scalar.&#xD;Otherwise, report the input as is.&#xD;&#xD;Exposing this block for users is important because Snap! /does not/ treat such a nesting&#xD;as a scalar, so you might need to use this in&#xD;translating an APL program to Snap!.&#xD;(But the functions in the APL library already use&#xD;this block as needed.)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><custom-block s="scalar? %s"><block var="value"/></custom-block><custom-block s="scalar-value helper %s"><block var="value"/></custom-block><block var="value"/></block></block></script></block-definition><block-definition s="grade up $⍋-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Reports a vector of indices of the items of the input, in order of the values of the items, so that&#xD;&#xD;item (grade up (foo)) of (foo)&#xD;&#xD;reports the items in sorted order, smallest to largest.  For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l><option>last</option></l><l/></block></autolambda><list></list></block><custom-block s="$flash sort %l ordering with %predRing"><custom-block s="multimap %repRing over %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="array"/><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportListAttribute"><l><option>length</option></l><block var="array"/></block></custom-block></list></custom-block><block s="reifyPredicate"><autolambda><custom-block s="sort helper %l %l"><l/><l/></custom-block></autolambda><list></list></block></custom-block></block></block></script></block-definition><block-definition s="sort helper %&apos;rowA&apos; %&apos;rowB&apos;" type="reporter" category="other" helper="true"><comment x="0" y="0" w="166" collapsed="false">Compares two vectors for sorting.&#xD;Compare first items; if those are equal compare second items; etc.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="rowA"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportListIsEmpty"><block var="rowB"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>1</l><block var="rowA"/></block><block s="reportListItem"><l>1</l><block var="rowB"/></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l>1</l><block var="rowA"/></block><block s="reportListItem"><l>1</l><block var="rowB"/></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doReport"><custom-block s="sort helper %l %l"><block s="reportCDR"><block var="rowA"/></block><block s="reportCDR"><block var="rowB"/></block></custom-block></block></script></block-definition><block-definition s="grade down $⍒-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Reports a vector of indices of the items of the input, in order of the values of the items, so that&#xD;&#xD;item (grade down (foo)) of (foo)&#xD;&#xD;reports the items in sorted order, largest to smallest.  For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l><option>last</option></l><l/></block></autolambda><list></list></block><custom-block s="$flash sort %l ordering with %predRing"><custom-block s="multimap %repRing over %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="array"/><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportListAttribute"><l><option>length</option></l><block var="array"/></block></custom-block></list></custom-block><block s="reifyPredicate"><autolambda><custom-block s="NOT $&#126;-1-255-255-0 %s"><custom-block s="sort helper %l %l"><l/><l/></custom-block></custom-block></autolambda><list></list></block></custom-block></block></block></script></block-definition><block-definition s="select rows (compress columns) %&apos;Booleans&apos; $/-1-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="210.66666666666663" collapsed="false">The left input must be a vector of Booleans&#xD;(either Snap! form or APL form); the right input must be an array whose first dimension is equal to the length of the left input.  The block reports an array of the same rank as the right input, containing only those items (rows, for a matrix) for which the corresponding Boolean is True (or 1).</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="rowize vector %l"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><custom-block s="truth %s"><block s="reportListItem"><block var="index"/><block var="Booleans"/></block></custom-block></autolambda><list><l>value</l><l>index</l></list></block><block var="array"/></block></custom-block></block></script></block-definition><block-definition s="rowize vector %&apos;vec&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vec"/></custom-block><l>2</l></list></block><block s="reportVariadicEquals"><list><block s="reportListItem"><l>2</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="vec"/></custom-block></block><l>1</l></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="vec"/></block><block var="vec"/></block></block></script></block-definition><block-definition s="select columns (compress rows) %&apos;bool&apos; $⌿-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="219.33333333333334" collapsed="false">The left input must be a vector of Booleans&#xD;(either Snap! form or APL form); the right input must be an array whose last dimension is equal to the length of the left input.  The block reports an array of the same rank as the right input, containing only those items (columns, for a matrix) for which the corresponding Boolean is True (or 1).</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="columnwise %repRing %l"><block s="reifyReporter"><autolambda><custom-block s="select rows (compress columns) %l $/-1-255-255-0 %l"><block var="bool"/><l/></custom-block></autolambda><list></list></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="columnwise %&apos;function&apos; %&apos;data&apos;" type="reporter" category="control" helper="true"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Turns a row-wise (in Lisp terminology) function&#xD;into a column-wise one.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="rowize vector %l"><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block s="evaluate"><block var="function"/><list><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="data"/></custom-block></list></block></custom-block></custom-block></block></script></block-definition><block-definition s="reverse column order (row contents) $⏀-1-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="206" collapsed="false">Reverses the order of the columns of the input, which is a reflection through a vertical axis, as the ⏀ symbol suggests.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="columnwise %repRing %l"><block s="reifyReporter"><autolambda><custom-block s="reverse row order (column contents) $⦵-1.5-255-255-0 %l"><l/></custom-block></autolambda><list></list></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="combine in columns (reduce by row vectors) %&apos;function&apos; $⌿-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="285.3333333333333" collapsed="false">This function has two names because there are two ways&#xD;to understand it.&#xD;&#xD;Lisp way:  A matrix is a list of rows.  This block turns it into a list of columns, and combines the numbers in each column, producing one value for the entire column.&#xD;&#xD;APL way:  A matrix is made of vectors.  This block takes each row as a vector, and does vector arithmetic on the rows, producing one row as the result.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="columnwise %repRing %l"><block s="reifyReporter"><autolambda><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block var="function"/><l/></custom-block></autolambda><list></list></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="catenate vertically %&apos;left&apos; $⍪-1.5-255-255-0 %&apos;right&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Like append, but:&#xD;&#xD;A scalar input is treated as a vector&#xD;of length 1.&#xD;&#xD;If the two inputs are of different ranks,&#xD;the function is mapped over the larger ranked input.&#xD;&#xD;Catenate vertically adds new rows, by appending to each column.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="left"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block><l>1</l></list></block><script><block s="doSetVar"><l>left</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>1</l></list></block><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="right"/></custom-block></custom-block></list></block><block s="reportNewList"><list><block var="left"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>left</l><block s="reportNewList"><list><block var="left"/></list></block></block></script></block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="right"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></list></block><script><block s="doSetVar"><l>right</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>1</l></list></block><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="left"/></custom-block></custom-block></list></block><block s="reportNewList"><list><block var="right"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>right</l><block s="reportNewList"><list><block var="right"/></list></block></block></script></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></list></block><script><block s="doIfElse"><block s="reportVariadicEquals"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></list></block><script><block s="doReport"><block s="reportConcatenatedLists"><list><block var="left"/><block var="right"/></list></block></block></script><script><block s="doReport"><custom-block s="transpose $⍉-1.5-255-255-0 %l"><custom-block s="catenate %s $,-1-255-255-0 %s"><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="left"/></custom-block><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="right"/></custom-block></custom-block></custom-block></block></script></block></script><list></list></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></list></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><block var="left"/><l></l></custom-block></autolambda><list></list></block><block var="right"/></block></block></script><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><block var="right"/></custom-block></autolambda><list></list></block><block var="left"/></block></block></script></block></script><scripts><script x="254" y="497.7777777777773"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><script></script><list></list></block><list><l/><l/></list></custom-block></script></scripts></block-definition><block-definition s="%&apos;a&apos; scalar join %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="219.33333333333334" collapsed="false">A hyperblock version of JOIN.  The regular JOIN isn&apos;t hyperized because it can accept a list as input, representing it as text.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="take %&apos;howmany&apos; $↑-1-255-255-0 from %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="272" collapsed="false">A positive left input selects the first n items of the right input.&#xD;A negative left input selects the last abs(n) items&#xD;of the right input.&#xD;&#xD;If the right input is a matrix, a numeric left input selects rows;&#xD;the left input may also be a two-item vector, in which case&#xD;the first number is applied to the rows&#xD;and the second number is applied to the columns.&#xD;Similarly for higher-dimension arrays. </comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="howmany"/><l><option>number</option></l></block><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block var="howmany"/><l>0</l></list></block><block s="reportListItem"><block s="reportVariadicSum"><list><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportMonadic"><l><option>abs</option></l><block var="howmany"/></block></custom-block><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="array"/></block><block var="howmany"/></list></block></list></block><block var="array"/></block><block s="reportListItem"><custom-block s="$⍳-1.5-255-255-0 %n"><block var="howmany"/></custom-block><block var="array"/></block></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="howmany"/></custom-block><l>1</l></list></block><script><custom-block s="error %txt"><l>Left input to take can&apos;t be a matrix.</l></custom-block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="howmany"/></block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="array"/></custom-block></list></block><script><custom-block s="error %txt"><l>Length of item vector &gt; rank of array in take.</l></custom-block></script><list></list></block><block s="doReport"><block s="reportListItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block var="value"/><l>0</l></list></block><block s="reportVariadicSum"><list><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportMonadic"><l><option>abs</option></l><block var="value"/></block></custom-block><block s="reportVariadicSum"><list><block s="reportListItem"><block var="index"/><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block><block var="value"/></list></block></list></block><custom-block s="$⍳-1.5-255-255-0 %n"><block var="value"/></custom-block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="howmany"/></block><block var="array"/></block></block></script></block-definition><block-definition s="drop %&apos;howmany&apos; $↓-1-255-255-0 from %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="306" collapsed="false">A positive left input selects all but the first n items of the right input.&#xD;A negative left input selects all but the last abs(n) items&#xD;of the right input.&#xD;&#xD;If the right input is a matrix, a numeric left input selects rows;&#xD;the left input may also be a two-item vector, in which case&#xD;the first number is applied to the rows&#xD;and the second number is applied to the columns.&#xD;Similarly for higher-dimension arrays. </comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="howmany"/><l><option>number</option></l></block><script><block s="doReport"><custom-block s="take %n $↑-1-255-255-0 from %l"><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>neg</option></l><custom-block s="signum $×-1-255-255-0 %n"><block var="howmany"/></custom-block></block><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="array"/></block><block s="reportMonadic"><l><option>abs</option></l><block var="howmany"/></block></block></list></block><block var="array"/></custom-block></block></script><list></list></block><block s="doReport"><custom-block s="take %n $↑-1-255-255-0 from %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block var="value"/><l>0</l></list></block><block s="reportVariadicSum"><list><block s="reportListItem"><block var="index"/><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block><block var="value"/></list></block><block s="reportDifference"><block var="value"/><block s="reportListItem"><block var="index"/><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="howmany"/></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="msg"/></list></block></script></block-definition><block-definition s="simple log base %&apos;b&apos; of %&apos;n&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportMonadic"><l><option>ln</option></l><block var="n"/></block><block s="reportMonadic"><l><option>ln</option></l><block var="b"/></block></block></block></script></block-definition><block-definition s="simple permutations of %&apos;r&apos; items out of %&apos;n&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="r"/><l>0</l></list></block><l>1</l><block s="reportAtomicCombine"><block s="reportNumbers"><block s="reportVariadicSum"><list><block s="reportDifference"><block var="n"/><block var="r"/></block><l>1</l></list></block><block var="n"/></block><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block></block></script></block-definition><block-definition s="simple combs %&apos;r&apos; out of %&apos;n&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><custom-block s="simple permutations of %n items out of %n"><block var="r"/><block var="n"/></custom-block><custom-block s="factorial $!-1-255-255-0 %n"><block var="r"/></custom-block></block></block></script></block-definition><block-definition s="numbers from %&apos;from&apos; to %&apos;to&apos; ascending" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="simple numbers from %n to %n ascending"><l></l><l></l></custom-block></autolambda><list></list></block></custom-block><list><block var="from"/><block var="to"/></list></block></block></script></block-definition><block-definition s="simple gcd %&apos;a&apos; %&apos;b&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="b"/><l>0</l></list></block><script><block s="doReport"><block var="a"/></block></script><list></list></block><block s="doReport"><custom-block s="simple gcd %n %n"><block var="b"/><block s="reportModulus"><block var="a"/><block var="b"/></block></custom-block></block></script></block-definition><block-definition s="de-boolean %&apos;n&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="de-boolean %s"><l></l></custom-block></autolambda><list></list></block><block var="n"/></block></block></script><script><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="n"/></custom-block><l>0</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="n"/><block s="reportBoolean"><l><bool>true</bool></l></block></list></block><l>1</l><block var="n"/></block></block></block></script></block></script></block-definition><block-definition s="simple lcm %&apos;a&apos; %&apos;b&apos;" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="b"/><l>0</l></list></block><script><block s="doReport"><block var="b"/></block></script><list></list></block><block s="doReport"><block s="reportVariadicProduct"><list><block var="a"/><block s="reportQuotient"><block var="b"/><custom-block s="simple gcd %n %n"><block var="a"/><block var="b"/></custom-block></block></list></block></block></script></block-definition><block-definition s="simple numbers from %&apos;from&apos; to %&apos;to&apos; ascending" type="reporter" category="other" helper="true"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicGreaterThan"><list><block var="from"/><block var="to"/></list></block><block s="reportNewList"><list></list></block><block s="reportNumbers"><block var="from"/><block var="to"/></block></block></block></script></block-definition><block-definition s="$flash sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists"><comment x="0" y="0" w="161.14285714285708" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations>ca:ordena _ segons criteri _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>lst_sort(list, fn)</l><list><block var="data"/><block var="function"/></list></block></block></script><scripts><script x="11.999999999999998" y="147.55555555555554"><block s="doDeclareVariables"><list><l>even items</l><l>odd items</l><l>merge</l><l>split</l><l>copy of data</l><l>id</l></list></block><block s="doSetVar"><l>id</l><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block></block><block s="doSetVar"><l>copy of data</l><block s="reportMap"><block var="id"/><block var="data"/></block></block><block s="doSetVar"><l>split</l><block s="reifyScript"><script><block s="doSetVar"><l>even items</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>odd items</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportListIsEmpty"><block var="copy of data"/></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="odd items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="copy of data"/></block></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="even items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block></script><list></list></block></script></block></script><list></list></block></block><block s="doSetVar"><l>merge</l><block s="reifyScript"><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="#1"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block var="#2"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="#2"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block var="#1"/></block></script><list></list></block><block s="doIfElse"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="reportListItem"><l>1</l><block var="#2"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="evaluate"><block var="merge"/><list><block s="reportCDR"><block var="#1"/></block><block var="#2"/></list></block></block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#2"/></block><block s="evaluate"><block var="merge"/><list><block var="#1"/><block s="reportCDR"><block var="#2"/></block></list></block></block></block></script></block></script><list><l>#1</l><l>#2</l></list></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="data"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doRun"><block var="split"/><list></list></block><block s="doReport"><block s="evaluate"><block var="merge"/><list><custom-block s="$flash sort %l ordering with %predRing"><block var="odd items"/><block var="function"/></custom-block><custom-block s="$flash sort %l ordering with %predRing"><block var="even items"/><block var="function"/></custom-block></list></block></block></script></scripts></block-definition><block-definition s="☠︎ linked? %&apos;data&apos;" type="predicate" category="lists" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>lst_linked(list)</l><list><block var="data"/></list></block></block></script></block-definition><block-definition s="☠︎ link %&apos;data&apos;" type="reporter" category="lists" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><block s="reportCDR"><block var="data"/></block></block></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666669" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).&#xD;&#xD;Will not work on circular lists.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportAtomicCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="lists"><comment x="0" y="0" w="105.33333333333331" collapsed="false">The identity function reports its input.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="multimap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="267.3333333333333" collapsed="false">Takes as input a function of N inputs and N lists.&#xD;The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on.  (The lists should all be the same length.)</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><custom-block s="%s"><l></l></custom-block></block></autolambda><list></list></block><block s="reportListAttribute"><l><option>columns</option></l><block var="lists"/></block></block></block></script></block-definition><block-definition s="scalar -&gt; hyper %&apos;func&apos;" type="reporter" category="control" helper="true"><comment x="0" y="0" w="218" collapsed="false">Takes a dyadic scalar function as input, and&#xD;hyperizes it, so that it can take lists as inputs.&#xD;&#xD;Don&apos;t use on slow functions (this has compiled map calls).  Meant for use on primitives.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>hyper func</l><l>scalarized</l></list></block><block s="doSetVar"><l>hyper func</l><block s="reifyReporter"><script><block s="doWarp"><script><block s="doIfElse"><custom-block s="scalar? %s"><block var="a"/></custom-block><script><block s="doIfElse"><custom-block s="scalar? %s"><block var="b"/></custom-block><script><block s="doReport"><block s="evaluate"><block var="func"/><list><custom-block s="scalar-value helper %s"><block var="a"/></custom-block><custom-block s="scalar-value helper %s"><block var="b"/></custom-block></list></block></block></script><script><block s="doSetVar"><l>scalarized</l><custom-block s="scalar-value helper %s"><block var="a"/></custom-block></block><block s="doIf"><block s="reportVariadicEquals"><list><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="b"/></block></list></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="func"/><list><block var="scalarized"/><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script><list></list></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><block var="scalarized"/><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script></block></script><script><block s="doIfElse"><custom-block s="scalar? %s"><block var="b"/></custom-block><script><block s="doSetVar"><l>scalarized</l><custom-block s="scalar-value helper %s"><block var="b"/></custom-block></block><block s="doIf"><block s="reportVariadicEquals"><list><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="a"/></block></list></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="func"/><list><l></l><block var="scalarized"/></list></block></autolambda><list></list></block><block var="a"/></block></block></script><list></list></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><l></l><block var="scalarized"/></list></block></autolambda><list></list></block><block var="a"/></block></block></script><script><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="a"/></block></list></block><block s="reportVariadicEquals"><list><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="b"/></block></list></block></list></block><script><block s="doReport"><custom-block s="multimap %repRing over %mult%l"><block var="func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script><list></list></block><block s="doReport"><custom-block s="multimap %repRing over %mult%l"><block var="hyper func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script></block></script></block></script></block></script><list><l>a</l><l>b</l></list></block></block><block s="doReport"><block var="hyper func"/></block></script></block-definition><block-definition s="log base %&apos;b&apos; $⍟-1.5-255-255-0 %&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Computes logarithms in any base.&#xD;&#xD;The base is the left input.  It&apos;s usual in APL that if there&apos;s a main data input and some sort of control input, the latter comes on the left.  This is because APL syntax, unless you use parentheses, groups computations from right to left.&#xD;&#xD;APL has a monadic version of this function that computes natural logs (log to the base e).</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="simple log base %n of %n"><l></l><l></l></custom-block></autolambda><list></list></block></custom-block><list><block var="b"/><block var="x"/></list></block></block></script></block-definition><block-definition s="combs %&apos;r&apos; at a time $!-1-255-255-0 of %&apos;n&apos;" type="reporter" category="operators"><comment x="0" y="0" w="218.66666666666669" collapsed="false">Computes the number of combinations of right-input things taken left-input at a time, otherwise known as the elements of Pascal&apos;s triangle.  This block shares the ! symbol with the monadic factorial function, because the formula for computing this function uses factorials.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="simple combs %n out of %n"><l></l><l></l></custom-block></autolambda><list></list></block></custom-block><list><block var="r"/><block var="n"/></list></block></block></script></block-definition><block-definition s="factorial $!-1-255-255-0 %&apos;n&apos;" type="reporter" category="operators"><comment x="0" y="0" w="172.66666666666666" collapsed="false">The factorial of a positive integer n is the product of the integers from 1 to n.&#xD;&#xD;In real APL, the domain of this function is extended beyond integers to compute the gamma function.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="factorial $!-1-255-255-0 %n"><l></l></custom-block></autolambda><list></list></block><block var="n"/></block></block></script><script><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="n"/></custom-block><l>1</l><block s="reportAtomicCombine"><block s="reportNumbers"><l>1</l><block var="n"/></block><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block></block></script></block></script></block-definition><block-definition s="%&apos;a&apos; scalar %&apos;pred&apos; %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="190" collapsed="false">Acts just like the function selected from&#xD;the pulldown menu, but hyperized, so&#xD;comparing two equal-sized lists reports&#xD;a list of the same length as the inputs,&#xD;with the results of item-by-item comparisons.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">﹦<options>﹦&#xD;≠&#xD;identical to&#xD;and&#xD;or&#xD;is _ a _?</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reportListItem"><block s="reportListIndex"><block var="pred"/><block s="reportNewList"><list><l>﹦</l><l>≠</l><l>identical to</l><l>and</l><l>or</l><l>is _ a _?</l></list></block></block><block s="reportNewList"><list><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><l></l><l></l></list></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportVariadicNotEquals"><list><l></l><l></l></list></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportVariadicIsIdentical"><list><l></l><l></l></list></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportVariadicAnd"><list><l/><l/></list></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportVariadicOr"><list><l/><l/></list></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l></l></block></autolambda><list></list></block></list></block></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="GCD (or) %&apos;a&apos; $∨-1.2-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Reports the greatest common divisor of its inputs.&#xD;If the inputs are values in {0,1} then this is equivalent to the logical OR of the values, with 0=False, 1=True.  Hence the APL symbol ∨.&#xD;Also accepts Snap! Booleans as inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="simple gcd %n %n"><l></l><l></l></custom-block></autolambda><list></list></block></custom-block><list><custom-block s="de-boolean %s"><block var="a"/></custom-block><custom-block s="de-boolean %s"><block var="b"/></custom-block></list></block></block></script></block-definition><block-definition s="LCM (and) %&apos;a&apos; $∧-1.2-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Reports the least common multiple of its inputs.&#xD;If the inputs are values in {0,1} then this is equivalent to the logical AND of the values, with 0=False, 1=True.  Hence the APL symbol ∧.&#xD;Also accepts Snap! Booleans as inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="simple lcm %n %n"><l></l><l></l></custom-block></autolambda><list></list></block></custom-block><list><custom-block s="de-boolean %s"><block var="a"/></custom-block><custom-block s="de-boolean %s"><block var="b"/></custom-block></list></block></block></script></block-definition><block-definition s="NOT $&#126;-1-255-255-0 %&apos;p&apos;" type="reporter" category="operators"><comment x="0" y="0" w="167.33333333333334" collapsed="false">Reports 1 if the input is False or 0;&#xD;otherwise reports 0.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportDifference"><l>1</l><custom-block s="signum $×-1-255-255-0 %n"><block s="reportMonadic"><l><option>abs</option></l><block var="p"/></block></custom-block></block></block></script></block-definition><block-definition s="permutations of %&apos;r&apos; items out of %&apos;n&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="simple permutations of %n items out of %n"><l></l><l></l></custom-block></autolambda><list></list></block></custom-block><list><block var="r"/><block var="n"/></list></block></block></script></block-definition><block-definition s="identity $+-1-255-255-0 %&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="210" collapsed="false">Reports its input.&#xD;This is useful to fit a value into a different-type input slot, e.g., number into list slot.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>id</option></l><block var="x"/></block></block></script></block-definition><block-definition s="deep map %&apos;function&apos; over %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="deep map %repRing over %l"><block var="function"/><l/></custom-block></autolambda><list></list></block><block var="data"/></block></block></script><script><block s="doReport"><block s="evaluate"><block var="function"/><list><block var="data"/></list></block></block></script></block></script></block-definition><block-definition s="%&apos;howmany&apos; deal $?-1-255-255-0 %&apos;range&apos;" type="reporter" category="operators"><comment x="0" y="0" w="177.33333333333334" collapsed="false">Report a list with left-input random integers in the range 1 to right-input.&#xD;No number appears more than once&#xD;in the result.  The left input must be less than or equal to the right input.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="%n deal helper %l"><l></l><block s="reportNumbers"><l>1</l><l></l></block></custom-block></autolambda><list></list></block></custom-block><list><block var="howmany"/><block var="range"/></list></block></block></script></block-definition><block-definition s="outer product %&apos;a&apos; $○.-1-255-255-0 %&apos;function&apos; %&apos;b&apos;" type="reporter" category="lists"><comment x="0" y="0" w="297.99999999999994" collapsed="false">Given two arrays A and B, reports an array whose dimensions are&#xD;APPEND(SHAPE OF (A), SHAPE OF (B))&#xD;in which each atomic item of the result is computed by applying the dyadic function input to an item of A and an item of B.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="a"/><l><option>list</option></l></block><script><block s="doIf"><block s="reportListIsEmpty"><block var="a"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doReport"><block s="reportCONS"><custom-block s="outer product %l $○.-1-255-255-0 %repRing %l"><block s="reportListItem"><l>1</l><block var="a"/></block><block var="function"/><block var="b"/></custom-block><custom-block s="outer product %l $○.-1-255-255-0 %repRing %l"><block s="reportCDR"><block var="a"/></block><block var="function"/><block var="b"/></custom-block></block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="b"/><l><option>list</option></l></block><script><block s="doIf"><block s="reportListIsEmpty"><block var="b"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doReport"><block s="reportCONS"><custom-block s="outer product %l $○.-1-255-255-0 %repRing %l"><block var="a"/><block var="function"/><block s="reportListItem"><l>1</l><block var="b"/></block></custom-block><custom-block s="outer product %l $○.-1-255-255-0 %repRing %l"><block var="a"/><block var="function"/><block s="reportCDR"><block var="b"/></block></custom-block></block></block></script><script><block s="doReport"><block s="evaluate"><block var="function"/><list><block var="a"/><block var="b"/></list></block></block></script></block></script></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="4262"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAB4KADAAQAAAABAAABaAAAAAAHwbojAAAL30lEQVR4Ae3QMQEAAADCoPVPbQwfiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGPgMDI3+AAEeFvcCAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="4263"></list></costumes><sounds><list struct="atomic" id="4264"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="3"><sprite name="Family tree" idx="2" x="-1" y="-2.999999999999858" heading="90" scale="1" volume="100" pan="0" rotation="0" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="4269"><costumes><list id="4270"><item><ref mediaID="Family tree_cst_PNG-afbeelding"></ref></item></list></costumes><sounds><list struct="atomic" id="4271"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714286" y="14.285714285714286"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Family tree</l><list><custom-block s="%mlt"><l>The GOAL field contains a list of potential goals. To select a goal, enter the corresponding item number.</l></custom-block></list><block s="reportNewList"><list><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>G</l><l>K</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>N</l><l>G</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>K</l><l>C</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>G</l><l>I</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>born</l><list><l>K</l><l>1965</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>born</l><list><l>N</l><l>1905</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>born</l><list><l>I</l><l>1967</l></list></custom-block></list></block><block s="reportNewList"><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>child</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?b</l><l>?a</l></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>grandparent</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?c</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>senior</l><list><l>?person_1</l><l>?person_2</l></list></custom-block><custom-block s="body: %mult%l"><list><custom-block s="goal: %s args %mult%s"><l>born</l><list><l>?person_1</l><l>?year_of_birth_1</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>born</l><list><l>?person_2</l><l>?year_of_birth_2</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>smaller</l><list><l>?year_of_birth_1</l><l>?year_of_birth_2</l></list></custom-block></list></custom-block></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>smaller</l><list><l>?value_1</l><l>?value_2</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThan"><list><l></l><l></l></list></block></autolambda><list></list></block><list><l>?value_1</l><l>?value_2</l><block s="reportBoolean"><l><bool>true</bool></l></block></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>sibling</l><list><l>?person_1</l><l>?person_2</l></list></custom-block><custom-block s="body: %mult%l"><list><custom-block s="goal: %s args %mult%s"><l>child</l><list><l>?person_1</l><l>?parent</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>child</l><list><l>?person_2</l><l>?parent</l></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><l></l><l></l></list></block></autolambda><list></list></block><list><l>?person_1</l><l>?person_2</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></custom-block></list></custom-block></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>greatgrandparent</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?c</l><l>?d</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?d</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>aunctle</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>sibling</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?c</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>niephcew</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>aunctle</l><list><l>?b</l><l>?a</l></list></custom-block></list></custom-block></list></block><block s="reportListItem"><l>4</l><block s="reportNewList"><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>K</l><l>C</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>C</l><l>K</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>child</l><list><l>?x</l><l>G</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>grandparent</l><list><l>?a</l><l>?b</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>senior</l><list><l>?x</l><l>?y</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>sibling</l><list><l>?x</l><l>?y</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>?relation</l><list><l>?</l><l>?</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>greatgrandparent</l><list><l>?a</l><l>?b</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>niephcew</l><list><l>?a</l><l>?b</l></list></custom-block></list></block></block></custom-block></script></scripts></sprite><sprite name="Before / after" idx="3" x="100" y="150" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="0,45.084000000000046,86.7,1" pen="tip" id="4643"><costumes><list struct="atomic" id="4644"></list></costumes><sounds><list struct="atomic" id="4645"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714286" y="14.285714285714286"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Before / after</l><list><custom-block s="%mlt"><l>This search would result in an infinite loop if it weren’t for the built-in “Loop Stopper” mechanism.</l></custom-block></list><block s="reportNewList"><list><custom-block s="fact %s args %mult%s"><l>before</l><list><l>1</l><l>2</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>before</l><list><l>2</l><l>3</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>before</l><list><l>3</l><l>4</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>before</l><list><l>4</l><l>5</l></list></custom-block></list></block><block s="reportNewList"><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>before</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>before</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>before</l><list><l>?c</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>after</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>before</l><list><l>?b</l><l>?a</l></list></custom-block></list></custom-block></list></block><custom-block s="goal: %s args %mult%s"><l>?</l><list><l>?</l><l>?</l></list></custom-block></custom-block></script></scripts></sprite><sprite name="Fibonacci" idx="4" x="148" y="24" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="0,183.6,128.52000000000004,1" pen="tip" id="4744"><costumes><list struct="atomic" id="4745"></list></costumes><sounds><list struct="atomic" id="4746"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714286" y="14.285714285714286"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Fibonacci numbers</l><list><custom-block s="%mlt"><l>Calculate the x-th fibonacci number.&#xD;This example involves branched recursion. It is manageable only because&#xD;the Amalog interpreter memoizes intermediate results.&#xD;Engage Turbo mode, if possible. Try small values of x first.</l></custom-block><custom-block s="%mlt"><l>Restrictions:&#xD;1. Maximum value of x is 1476 (on my system; taking 4 minutes to calculate).&#xD;2. This program won&apos;t work with the BIGNUMS library (IRDKY).</l></custom-block></list><block s="reportNewList"><list><custom-block s="fact %s args %mult%s"><l>fibonacci</l><list><l>2</l><l>1</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>fibonacci</l><list><l>1</l><l>1</l></list></custom-block></list></block><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>fibonacci</l><list><l>?x</l><l>?f</l></list></custom-block><block s="reportNewList"><list><custom-block s="goal: %s args %mult%s"><block s="reifyReporter"><autolambda><block s="reportVariadicGreaterThan"><list><l></l><l>2</l></list></block></autolambda><list></list></block><list><l>?x</l><block s="reportBoolean"><l><bool>true</bool></l></block></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyReporter"><autolambda><block s="reportDifference"><l></l><l>1</l></block></autolambda><list></list></block><list><l>?x</l><l>?y</l></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyReporter"><autolambda><block s="reportDifference"><l></l><l>2</l></block></autolambda><list></list></block><list><l>?x</l><l>?z</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>fibonacci</l><list><l>?y</l><l>?f1</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>fibonacci</l><list><l>?z</l><l>?f2</l></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block><list><l>?f1</l><l>?f2</l><l>?f</l></list></custom-block></list></block></custom-block></list><custom-block s="goal: %s args %mult%s"><l>fibonacci</l><list><l>20</l><l>?r</l></list></custom-block></custom-block></script></scripts></sprite><sprite name="Tutorial" idx="1" x="34" y="34.99999999999994" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="170.85000000000002,51.25500000000001,0,1" pen="tip" id="4883"><costumes><list struct="atomic" id="4884"></list></costumes><sounds><list struct="atomic" id="4885"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714286" y="14.285714285714286"><custom-block s="$speechBubbleOutline %mult%mlt"><list><custom-block s="%mlt"><l>AMALOG tutorial </l></custom-block><custom-block s="%mlt"><l>Amalog is a simple, Prolog-like, logic programming language.&#xD;The main principle is: you, the user / programmer, will only describe the problem, &#xD;and the Amalog interpreter will try to solve it. This is called "declarative programming".</l></custom-block><custom-block s="%mlt"><l>An Amalog PROGRAM is made up of clauses (facts, rules) and a single goal.</l></custom-block><custom-block s="%mlt"><l>A GOAL consists of single HEAD: a FUNCTOR and 0-to-many ARGUMENTS.&#xD;The interpreter will try to "prove"  the goal, using the provided facts and clauses.&#xD;If the goal can be proved,"TRUE" will be reported.&#xD;If the goal can not be proved, " FALSE" will be reported.&#xD;A goal may contain variables, starting with "?".&#xD;If multiple solutions are found, instead of "TRUE"  the block will report a list of solutions.</l></custom-block><custom-block s="%mlt"><l>A CLAUSE consists of a head (functor with 0-to-many arguments) and 0-to-many sub-goals.&#xD;A clause is true if all of its sub-goals are proved true.</l></custom-block><custom-block s="%mlt"><l>A RULE is a clause with at least 1 sub-goal (the list of sub-goals is also called the “body”).</l></custom-block><custom-block s="%mlt"><l>A FACT is a clause with 0 sub-goals. It consists of a head only. it is TRUE by definition.</l></custom-block><custom-block s="%mlt"><l>A goal is TRUE if at least one clause (= fact or rule) is true whose head is&#xD;compatible with the goal. Compatible, meaning: each pair of their elements&#xD;(functor and arguments) are either the same, or at least one is a variable. </l></custom-block><custom-block s="%mlt"><l>A special feature of Amalog is that any SNAP! SCRIPT may be&#xD;used as functor within a goal. The number of arguments must be equal&#xD;to the Snap! script’s argument count, plus one. &#xD;If the script is a function (or a predicate), the final argument&#xD;denotes the result of the Snap! function as applied to the preceding arguments.&#xD;If the script is a command, TRUE will be returned as the final argument.</l></custom-block></list></custom-block></script><script x="14.285714285714286" y="377.00000000000006"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Example 1</l><list><custom-block s="%mlt"><l>Three facts: Anne is Bing’s parent, Bing is Chico’s parent, Bing is Dagmar’s parent.&#xD;One rule: ?a is ?b’s grandparent IF a person exists (denoted by the ?c variable)&#xD;whose parent is ?a AND who is a parent of ?b.&#xD;Goal (to prove): Anne is a grandparent of Chico.&#xD;Press this block to try.</l></custom-block></list><list><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>Anne</l><l>Bing</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>Bing</l><l>Chico</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>Bing</l><l>Dagmar</l></list></custom-block></list><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>grandparent</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?c</l><l>?b</l></list></custom-block></list></custom-block></list><custom-block s="goal: %s args %mult%s"><l>grandparent</l><list><l>Anne</l><l>Chico</l></list></custom-block></custom-block></script><script x="14.285714285714286" y="618.6904761904759"><custom-block s="$speechBubbleOutline %mult%mlt"><list><custom-block s="%mlt"><l>What if, in Example 1, the goal to prove were … ?</l></custom-block><block s="reifyReporter"><autolambda><custom-block s="goal: %s args %mult%s"><l>grandchild</l><list><l>Chico</l><l>Anne</l></list></custom-block></autolambda><list></list></block><custom-block s="%mlt"><l>Answer: FALSE.&#xD;Explanation: even though this may be true in real life, the program is unaware of that. &#xD;This may be fixed by adding a “grandchild” rule:</l></custom-block><block s="reifyReporter"><autolambda><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>grandchild</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>grandparent</l><list><l>?b</l><l>?a</l></list></custom-block></list></custom-block></autolambda><list></list></block><custom-block s="%mlt"><l>What if the goal to prove were … ?</l></custom-block><block s="reifyReporter"><autolambda><custom-block s="goal: %s args %mult%s"><l>grandparent</l><list><l>Anne</l><l>?</l></list></custom-block></autolambda><list></list></block><custom-block s="%mlt"><l>Answer: ((grandparent Anne Chico) (grandparent Anne Dagmar))&#xD;Explanation: there are two solutions. In case of multiple solutions, all are reported.</l></custom-block></list></custom-block></script><script x="14.285714285714286" y="828.4047619047622"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Example 2</l><list><custom-block s="%mlt"><l>The final sub-goal of the clause has Snap!s built-in "_&lt;_" predicate as functor.&#xD;Tne final argument of this (sub-)goal denotes the result of the functor applied on the&#xD;preceding arguments. The final argument may be a variable (starting with "?"). In this&#xD;case however it&apos;s a constant (TRUE), working as a solutions filter: (Chico Anne) fails.</l></custom-block></list><list><custom-block s="fact %s args %mult%s"><l>born</l><list><l>Chico</l><l>2009</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>born</l><list><l>Anne</l><l>1952</l></list></custom-block></list><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>senior</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>born</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>born</l><list><l>?b</l><l>?d</l></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThan"><list><l></l><l></l></list></block></autolambda><list></list></block><list><l>?c</l><l>?d</l><block s="reportBoolean"><l><bool>true</bool></l></block></list></custom-block></list></custom-block></list><custom-block s="goal: %s args %mult%s"><l>senior</l><list><l>?a</l><l>?b</l></list></custom-block></custom-block></script></scripts></sprite><sprite name="Command" idx="5" x="-73" y="54" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="91.79999999999998,114.75,0,1" pen="tip" id="5122"><costumes><list struct="atomic" id="5123"></list></costumes><sounds><list struct="atomic" id="5124"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714286" y="14.285714285714286"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Command</l><list><custom-block s="%mlt"><l>Test a command ‘’goal”.&#xD;1st Rule: say persons’ names, but don’t report them as solutions.&#xD;2nd Rule: report as solutions, persons’ names starting with “T”.</l></custom-block></list><list><custom-block s="fact %s args %mult%s"><l>person</l><list><l>Volodymyr</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>person</l><list><l>Taylor</l></list></custom-block><custom-block s="dummy clause"></custom-block></list><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>show person</l><list><l>?x</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>person</l><list><l>?x</l></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyScript"><script><block s="doSayFor"><l></l><l>1</l></block></script><list></list></block><list><l>?x</l><block s="reportBoolean"><l><bool>true</bool></l></block></list></custom-block><custom-block s="cut"></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>show person</l><list><l>?x</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>person</l><list><l>?x</l></list></custom-block><custom-block s="goal: %s args %mult%s"><block s="reifyReporter"><autolambda><block s="reportLetter"><l>1</l><l></l></block></autolambda><list></list></block><list><l>?x</l><l>T</l></list></custom-block><custom-block s="dummy goal"></custom-block></list></custom-block></list><custom-block s="goal: %s args %mult%s"><l>show person</l><list><l>?a</l></list></custom-block></custom-block></script></scripts></sprite><sprite name="List" idx="6" x="-126" y="148" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="145.35,61.047,0,1" pen="tip" id="5227"><costumes><list struct="atomic" id="5228"></list></costumes><sounds><list struct="atomic" id="5229"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14.285714285714286" y="14.285714285714286"><custom-block s="AMALOG program id: %mlt %br ‎ ‎ %br comments: %mult%mlt %br ‎ %br facts: %mult%l %br ‎ %br rules: %mult%l %br ‎ %br goal: %l"><l>Ancestor relations</l><list><custom-block s="%mlt"><l>Test of Loop Stopper mechanism.&#xD;If the 2nd rule were slightly modified:</l></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>ancestor</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>ancestor</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?c</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="%mlt"><l>… the program would not find all solutions!</l></custom-block></list><block s="reportNewList"><list><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>G</l><l>K</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>N</l><l>G</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>K</l><l>C</l></list></custom-block><custom-block s="fact %s args %mult%s"><l>parent</l><list><l>G</l><l>I</l></list></custom-block></list></block><list><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>ancestor</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?a</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="rule: %l :- %mult%l"><custom-block s="head: %s args %mult%s"><l>ancestor</l><list><l>?a</l><l>?b</l></list></custom-block><list><custom-block s="goal: %s args %mult%s"><l>parent</l><list><l>?a</l><l>?c</l></list></custom-block><custom-block s="goal: %s args %mult%s"><l>ancestor</l><list><l>?c</l><l>?b</l></list></custom-block></list></custom-block><custom-block s="dummy clause"></custom-block></list><custom-block s="goal: %s args %mult%s"><l>ancestor</l><list><l>?</l><l>?</l></list></custom-block></custom-block></script></scripts></sprite><watcher var="findings" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="log" style="normal" x="2.7931180896412116" y="12.789449549075186" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="findings" transient="true"/><variable name="in progress" transient="true"/><variable name="log" transient="true"/></variables></scene></scenes></project><media name="Logic programming" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><costume name="PNG-afbeelding" center-x="240" center-y="125" image="data:image/png;base64,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JPcAoaysAu+99zVycvJw/fWX4ttvF6j37O7uhnPPHSv4WqKiprm4OOPzz+fgoosmqDqXXXYuPDzo59s+sDLCcmCUKz1YtNOakrpcVM4Lp45RWutJX62DQ//RKKuqAv11ZTsYLq184PpujXMDAwYGDAwcTQzQc6JSkrZ46wlwKwNu27YHN9/8GKg6nT79P3j44X+p2i4uTrj44jNB9SQXbT1QEnvrrc+VSnTUqIE4//xxanFmnfDwEEXIduzYqwgzCbCTk6Mics8++y7GjBmMBx+8WRFgjnnDDZMV0ef5li27VfuvvvoJe/ceUIRFP25goC8+++xHBAT4CRE6DW+//YVSE5MJOPPMURJC01OOI/HNN/PlmS7H5s070atXFxVaMzExXqTfCiE8zmoOQ4b0xV9//a265/zIMLA/EscHHri5cdiJE8chRMII//rrMixdulYRH95kGVW+L7zwgTAPZ0g4z0TceONkxQToJWAXFxe88spHQvg74e67p2LIkD6Kofjll79ASfSaay5U8960aacakwTO398HxNXQof2UVKoR4LMlzwDHefPNz4TABuL55x+QOa0RJmMFunaNx3DJK/Ddd/MVk0FGhjgcNkzS5erg55//xG23TVMlH3wwHfHxZsJP3N1yyxWKCeM34evrhcceu00xFWRcLr74LIUjMgA9eyaocf38fA6J+HJwIcAaeRWfWzUd839OYtDglfQPCr59FRESJaZ0zhtwTNuDCdf+WyJfeaHij89RtupnuIR2hGOXAfAfcDrK//lD14NxamDAwICBgeODAa5qTSubZQ6tqKCp+kxJWSqSlKdIo98qqVQvMXHxnzPnd/z55yqpY5Z0oqLCZRG/SklNlCgZT1qD4uJSRRxJFCnhUrKmepl7zI89dqsQYye1H8uYwCSkn332gyLOJC6UMH/66U+Rrs5UCzv3hTdv3gUSBEqDVH2TyFHy5rxuvXUKiopKQSnO3Z024UBsbJQQ5QzFPHBf8/LLzxPCvkvd4xy6do1T5/r/2O8PP/yGm266TIifr11VrKurq+qT0iOlQuJo9uxfMG3anao+cfL++18Lw9IgBH5IY/erVm3A7bdfLcQrwPLcjbdEqh6DTz75XgiwF3r06KxuEH8//vibMEP3CMNQKZJukxssJWPiZ8CAnophuu++50Dpe8qUiUqi5zaCl2TA4zOsW7dV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" embed="&lt;script app=&quot;Snap! 9.0, https://snap.berkeley.edu&quot; version=&quot;2&quot;&gt;&lt;blocks&gt;&lt;palette&gt;&lt;category name=&quot;Logic&quot; color=&quot;0,116,143,1&quot;/&gt;&lt;/palette&gt;&lt;block-definition s=&quot;head: %&amp;apos;functor&amp;apos; args %&amp;apos;arguments&amp;apos;&quot; type=&quot;reporter&quot; category=&quot;Logic&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;code&gt;&lt;/code&gt;&lt;translations&gt;&lt;/translations&gt;&lt;inputs&gt;&lt;input type=&quot;%s&quot;&gt;&lt;/input&gt;&lt;input type=&quot;%mult%s&quot;&gt;&lt;/input&gt;&lt;/inputs&gt;&lt;script&gt;&lt;block s=&quot;doReport&quot;&gt;&lt;block s=&quot;reportCONS&quot;&gt;&lt;block var=&quot;functor&quot;/&gt;&lt;block var=&quot;arguments&quot;/&gt;&lt;/block&gt;&lt;/block&gt;&lt;/script&gt;&lt;/block-definition&gt;&lt;block-definition s=&quot;goal: %&amp;apos;functor&amp;apos; args %&amp;apos;arguments&amp;apos;&quot; type=&quot;reporter&quot; category=&quot;Logic&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;code&gt;&lt;/code&gt;&lt;translations&gt;&lt;/translations&gt;&lt;inputs&gt;&lt;input type=&quot;%s&quot;&gt;&lt;/input&gt;&lt;input type=&quot;%mult%s&quot;&gt;&lt;/input&gt;&lt;/inputs&gt;&lt;script&gt;&lt;block s=&quot;doReport&quot;&gt;&lt;block s=&quot;reportCONS&quot;&gt;&lt;block var=&quot;functor&quot;/&gt;&lt;block var=&quot;arguments&quot;/&gt;&lt;/block&gt;&lt;/block&gt;&lt;/script&gt;&lt;/block-definition&gt;&lt;block-definition s=&quot;clause: %&amp;apos;head&amp;apos; :- %&amp;apos;body&amp;apos;&quot; type=&quot;reporter&quot; category=&quot;Logic&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;code&gt;&lt;/code&gt;&lt;translations&gt;&lt;/translations&gt;&lt;inputs&gt;&lt;input type=&quot;%l&quot;&gt;&lt;/input&gt;&lt;input type=&quot;%mult%l&quot;&gt;&lt;/input&gt;&lt;/inputs&gt;&lt;script&gt;&lt;block s=&quot;doReport&quot;&gt;&lt;block s=&quot;reportNewList&quot;&gt;&lt;list&gt;&lt;block var=&quot;head&quot;/&gt;&lt;block var=&quot;body&quot;/&gt;&lt;/list&gt;&lt;/block&gt;&lt;/block&gt;&lt;/script&gt;&lt;/block-definition&gt;&lt;block-definition s=&quot;body: %&amp;apos;goals&amp;apos;&quot; type=&quot;reporter&quot; category=&quot;Logic&quot;&gt;&lt;comment x=&quot;0&quot; y=&quot;0&quot; w=&quot;112&quot; collapsed=&quot;false&quot;&gt;A container for goals. &amp;#xD;Use as &amp;quot;input list&amp;quot; only!&lt;/comment&gt;&lt;header&gt;&lt;/header&gt;&lt;code&gt;&lt;/code&gt;&lt;translations&gt;&lt;/translations&gt;&lt;inputs&gt;&lt;input type=&quot;%mult%l&quot;&gt;&lt;/input&gt;&lt;/inputs&gt;&lt;script&gt;&lt;block s=&quot;doReport&quot;&gt;&lt;block var=&quot;goals&quot;/&gt;&lt;/block&gt;&lt;/script&gt;&lt;/block-definition&gt;&lt;block-definition s=&quot;let %&amp;apos;var&amp;apos; be %&amp;apos;value&amp;apos;&quot; type=&quot;command&quot; category=&quot;variables&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;code&gt;&lt;/code&gt;&lt;translations&gt;&lt;/translations&gt;&lt;inputs&gt;&lt;input type=&quot;%upvar&quot;&gt;&lt;/input&gt;&lt;input type=&quot;%s&quot;&gt;&lt;/input&gt;&lt;/inputs&gt;&lt;script&gt;&lt;block s=&quot;doSetVar&quot;&gt;&lt;l&gt;var&lt;/l&gt;&lt;block var=&quot;value&quot;/&gt;&lt;/block&gt;&lt;/script&gt;&lt;/block-definition&gt;&lt;/blocks&gt;&lt;script&gt;&lt;custom-block s=&quot;let %upvar be %s&quot;&gt;&lt;l&gt;rules&lt;/l&gt;&lt;block s=&quot;reportNewList&quot;&gt;&lt;list&gt;&lt;custom-block s=&quot;clause: %l :- %mult%l&quot;&gt;&lt;custom-block s=&quot;head: %s args %mult%s&quot;&gt;&lt;l&gt;child&lt;/l&gt;&lt;list&gt;&lt;l&gt;?a&lt;/l&gt;&lt;l&gt;?b&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;list&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;parent&lt;/l&gt;&lt;list&gt;&lt;l&gt;?b&lt;/l&gt;&lt;l&gt;?a&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;clause: %l :- %mult%l&quot;&gt;&lt;custom-block s=&quot;head: %s args %mult%s&quot;&gt;&lt;l&gt;grandparent&lt;/l&gt;&lt;list&gt;&lt;l&gt;?a&lt;/l&gt;&lt;l&gt;?b&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;list&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;parent&lt;/l&gt;&lt;list&gt;&lt;l&gt;?a&lt;/l&gt;&lt;l&gt;?c&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;parent&lt;/l&gt;&lt;list&gt;&lt;l&gt;?c&lt;/l&gt;&lt;l&gt;?b&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;clause: %l :- %mult%l&quot;&gt;&lt;custom-block s=&quot;head: %s args %mult%s&quot;&gt;&lt;l&gt;senior&lt;/l&gt;&lt;list&gt;&lt;l&gt;?person_1&lt;/l&gt;&lt;l&gt;?person_2&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;body: %mult%l&quot;&gt;&lt;list&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;born&lt;/l&gt;&lt;list&gt;&lt;l&gt;?person_1&lt;/l&gt;&lt;l&gt;?year_of_birth_1&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;born&lt;/l&gt;&lt;list&gt;&lt;l&gt;?person_2&lt;/l&gt;&lt;l&gt;?year_of_birth_2&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;smaller&lt;/l&gt;&lt;list&gt;&lt;l&gt;?year_of_birth_1&lt;/l&gt;&lt;l&gt;?year_of_birth_2&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;comment w=&quot;179&quot; collapsed=&quot;false&quot;&gt;Strings starting with &amp;quot;?&amp;quot; are variables, &lt;/comment&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;clause: %l :- %mult%l&quot;&gt;&lt;custom-block s=&quot;head: %s args %mult%s&quot;&gt;&lt;l&gt;smaller&lt;/l&gt;&lt;list&gt;&lt;l&gt;?value_1&lt;/l&gt;&lt;l&gt;?value_2&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;list&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;block s=&quot;reifyPredicate&quot;&gt;&lt;autolambda&gt;&lt;block s=&quot;reportVariadicLessThan&quot;&gt;&lt;list&gt;&lt;l&gt;&lt;/l&gt;&lt;l&gt;&lt;/l&gt;&lt;/list&gt;&lt;/block&gt;&lt;/autolambda&gt;&lt;list&gt;&lt;/list&gt;&lt;/block&gt;&lt;list&gt;&lt;l&gt;?value_1&lt;/l&gt;&lt;l&gt;?value_2&lt;/l&gt;&lt;l&gt;?result&lt;/l&gt;&lt;/list&gt;&lt;comment w=&quot;228&quot; collapsed=&quot;false&quot;&gt;Snap! functions may be used as 1st element (functor) of a goal. The final argument will denote the result, it MUST be a variable.&lt;/comment&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;true&lt;/l&gt;&lt;list&gt;&lt;l&gt;?result&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;clause: %l :- %mult%l&quot;&gt;&lt;custom-block s=&quot;head: %s args %mult%s&quot;&gt;&lt;l&gt;sibling&lt;/l&gt;&lt;list&gt;&lt;l&gt;?person_1&lt;/l&gt;&lt;l&gt;?person_2&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;body: %mult%l&quot;&gt;&lt;list&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;child&lt;/l&gt;&lt;list&gt;&lt;l&gt;?person_1&lt;/l&gt;&lt;l&gt;?parent&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;child&lt;/l&gt;&lt;list&gt;&lt;l&gt;?person_2&lt;/l&gt;&lt;l&gt;?parent&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;block s=&quot;reifyPredicate&quot;&gt;&lt;autolambda&gt;&lt;block s=&quot;reportVariadicEquals&quot;&gt;&lt;list&gt;&lt;l&gt;&lt;/l&gt;&lt;l&gt;&lt;/l&gt;&lt;/list&gt;&lt;/block&gt;&lt;/autolambda&gt;&lt;list&gt;&lt;/list&gt;&lt;/block&gt;&lt;list&gt;&lt;l&gt;?person_1&lt;/l&gt;&lt;l&gt;?person_2&lt;/l&gt;&lt;l&gt;?result&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;custom-block s=&quot;goal: %s args %mult%s&quot;&gt;&lt;l&gt;false&lt;/l&gt;&lt;list&gt;&lt;l&gt;?result&lt;/l&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;/list&gt;&lt;/custom-block&gt;&lt;/custom-block&gt;&lt;/list&gt;&lt;/block&gt;&lt;comment w=&quot;233&quot; collapsed=&quot;false&quot;&gt;A rule is a clause with a head and a body. A body may consist of several goals,&amp;#xD;Goals within a body are evaluated from left to right!&lt;/comment&gt;&lt;/custom-block&gt;&lt;/script&gt;&lt;/script&gt;" mediaID="Family tree_cst_PNG-afbeelding"/></media></snapdata>