my trail log list 1st column contains a reference to a cloned sprite - in my prog, the clones are sometimes deleted so I need to know this when processing my list
It easy to tell them visually but I can't come up with a programmatic method that tells them apart
<blocks app="Snap! 6, https://snap.berkeley.edu" version="1"><block-definition s="%'object' clone still exist?" type="predicate" category="control"><comment w="124.16666666666667" collapsed="false">Author: @warped_wart_wars
Checks to see if a clone reference is still valid or not</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><custom-block s="safely try %cs then if %upvar %cs"><script><custom-block s="ignore %s"><block s="reportNot"><block s="reportAskFor"><block var="object"/><block s="reifyReporter"><autolambda><block s="direction"></block></autolambda><list></list></block><list></list></block></block></custom-block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><l>error</l><script><block s="doIf"><custom-block s="text %txt contains %txt"><custom-block s="%s as text"><block var="error"/></custom-block><custom-block s="%mlt"><l>cannot operate on a deleted sprite</l></custom-block></custom-block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></custom-block></script></block-definition><block-definition s="ignore %'input'" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="%'input' as text" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>input</l></list><l>return input.toString();</l></block><list><block var="input"/></list></block></block></script></block-definition><block-definition s="%'multi'" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="multi"/></block></script></block-definition><block-definition s="text %'string' contains %'marker'" type="predicate" category="operators"><comment x="0" y="0" w="217.99999999999997" collapsed="false">Reports True if the first input string contains the second input string, otherwise false.

Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.</comment><header></header><code></code><translations>pt:o texto de _ antes de _
</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l></list><l>var world=this.parentThatIsA(IDE_Morph);
if (!("stringLibCaseIndependentComparison" in world)) {
 world["stringLibCaseIndependentComparison"] = true;
};
if (world["stringLibCaseIndependentComparison"]) {
 var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());
 return !(index<0);
} else {
 var index=string.indexOf(marker);
 return !(index<0);
}</l></block><list><block var="string"/><block var="marker"/></list></block></block></script></block-definition><block-definition s="safely try %'action' then if %'error' %'handler'" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.

Runs the first script. If it succeeds, nothing else happens.
But if it has an error (something that would otherwise result
in a red halo around the block), then the second script is run,
with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _
</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><custom-block s="let %upvar be %s"><l>reset</l><block s="evaluate"><block s="reportJSFunction"><list><l>proc</l></list><l>var oldHandleError = proc.handleError,
 oldCatchingErrors = proc.isCatchingErrors;

return function(){
 proc.handleError = oldHandleError;
 proc.isCatchingErrors = oldCatchingErrors;
}</l></block><list></list></block></custom-block><block s="doCallCC"><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>reset</l><l>action</l><l>handler</l><l>proc</l></list><l>proc.isCatchingErrors = true;
proc.handleError = function(error, element){
 reset();
 proc.context = handler;
 proc.context.variables.setVar("error", error);
}

try{
 proc.evaluate(action, new List(), true);
}
catch(e){
 proc.handleError(e, null);
} </l></block><list><block var="reset"/><block var="action"/><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><block s="doRun"><block var="handler"/><list></list></block><block s="doRun"><block var="return"/><list></list></block></script><list></list></block><list></list></block></script><list></list></block></list></block></script><list><l>return</l></list></block></block><block s="doRun"><block var="reset"/><list></list></block></script></block-definition><block-definition s="let %'var' be %'val'" type="command" category="other"><comment x="0" y="0" w="183.33333333333334" collapsed="false">LET (FOO) BE (5)
is equivalent to
SCRIPT VARIABLES (FOO)
SET (FOO) TO (5)</comment><header></header><code></code><translations>pt:cria a variável de guião _ com valor _
</translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition></blocks>