Nested templated data: Difference between revisions

Content added Content deleted
No edit summary
Line 163: Line 163:


=={{header|M2000 Interpreter}}==
=={{header|M2000 Interpreter}}==
We can use ? as undefined value. Is an object of internal type VarItem. So we have two big tuples, the second one has two "unused" places, with type of Varitem.

<lang M2000 Interpreter>
<lang M2000 Interpreter>
Font "Courier New"
Font "Courier New"
Line 168: Line 170:
Module Checkit {
Module Checkit {
t=(((1,2), (3,4,1),5),) ' use (1,) for one item tuple
t=(((1,2), (3,4,1),5),) ' use (1,) for one item tuple

Payload = lambda (a)->{
Payload = lambda (a)->{
k=each(a)
unused=list
res=(,)
inner=lambda unused, p=0 (a)-> {
link a to a()
k=each(a)
while k {
res=(,)
if type$(a(k^))="mArray" then
link a to a()
while k {
select case type$(a(k^))
case "mArray"
Append res, (Lambda(array(a, k^)),)
Append res, (Lambda(array(a, k^)),)
else
Case "VarItem" ' for more than one line need to place in a block
{
Append res, ("Payload#"+trim$(str$(array(k))),) ' one item tuple append to res
Append res, ("Unused#pos"+trim$(str$(p)),) ' one item tuple append to res
end if
append unused, p
p++
}
else case
{
Append res, ("Payload#"+trim$(str$(array(k))),) ' one item tuple append to res
p++
}
end select
}
=res
}
}
=res
=inner(a), unused
}
}
Expand$ = lambda$ (a, feed$=" ")->{
Expand$ =lambda$ -> {
\\ we can pass a tuple of two arguments or two arguments
k=each(a)
lim=len(a)-1
Read a as array
if empty then Data!a : Read a as array, unused as list else read unused as list
res$="["
link a to a() ' to use type$()
while k {
inner$= lambda$ (a, feed$=" ")->{
if type$(a(k^))="mArray" then
k=each(a)
res$+=Lambda$(array(a, k^),feed$+" ")
lim=len(a)-1
if k^<lim then
res$="["
res$+={,
link a to a() ' to use type$()
}+feed$
while k {
if type$(a(k^))="mArray" then
res$+=Lambda$(array(a, k^),feed$+" ")
if k^<lim then
res$+={,
}+feed$
end if
else
res$+= "'"+array$(k)+"'"
if k^<lim then res$+=", "
end if
end if
else
}
res$+= "'"+array$(k)+"'"
=res$+"]"
if k^<lim then res$+=", "
}
end if
if len(unused)>1 then
}
un=each(unused)
=res$+"]"
lim=len(unused)-1
document unused$="Unused: "
while un {
unused$="pos"+str$(eval(un))
if un^<lim then unused$=", "
}
=inner$(a)+{
}+unused$
Else
=inner$(a)+{
}
End if

}
}
Clipboard Expand$(Payload(t))
result$=Expand$(Payload(t))
m=Payload((((1,?), (3,4,?),5),))
clipboard result$+Expand$(array(m,0), array(m,1))
}
}
Checkit
Checkit
report Clipboard$
report Clipboard$

</lang>
</lang>
{{out}}
{{out}}
Line 211: Line 251:
['Payload#3', 'Payload#4', 'Payload#1'],
['Payload#3', 'Payload#4', 'Payload#1'],
'Payload#5']]
'Payload#5']]
[[['Payload#1', 'Unused#pos1'],
['Payload#3', 'Payload#4', 'Unused#pos4'],
'Payload#5']]
Unused: pos 1, pos 4
</pre >
</pre >
1


=={{header|Perl}}==
=={{header|Perl}}==