Anonymous user
Nested templated data: Difference between revisions
→{{header|M2000 Interpreter}}
Line 163:
=={{header|M2000 Interpreter}}==
<lang M2000 Interpreter>
Line 170 ⟶ 169:
Module Checkit {
t=(((1,2), (3,4,1),5),) ' use (1,) for one item tuple
Tuple$ = lambda$ (a, feed$=" ") -> {
\\ we can pass a tuple of two arguments or two arguments
res$="("
link a to a() ' to use type$()
while k {
if type$(a(k^))="mArray" then
res$+=Lambda$(array(a, k^),feed$+" ")
if k^<lim then
res$+={,
}+feed$
end if
else
res$+= trim$(str$(array(k)))
if k^<lim then res$+=", "
end if
}
=res$+")"
}
TotalPayload = lambda (a)->{
k=each(a)
link a to a()
res=0
while k {
if type$(a(k^))="mArray" then
res+=Lambda(a(k^))
else
res++
end if
}
=res
}
Payload = lambda (a,payloads as list)->{
misspayloads=List
used=list
inner=lambda misspayloads, p=1, payloads, used (a)-> {
k=each(a)
res=(,)
link a to a()
while k {
Append res, (Lambda(a(k^)),)
else
Append res, (curpayload$,)
if exist(payloads, curpayload$) then
delete payloads, curpayload$
if not exist(used, curpayload$) then append used, curpayload$
end if
p++
end if
end if
}
=res
}
=inner(a),
}
Expand$ =lambda$ (a as array, unused as list, misspayloads as list)-> {
Read ? space$
inner$= lambda$ (a, feed$=" ")->{
k=each(a)
Line 222 ⟶ 260:
=res$+"]"
}
}
if len(unused)>0 then
un=each(unused)
while un {
unused$="
}
end if
if len(misspayloads)>0 then
un=each(misspayloads)
lim=len(misspayloads)-1
document missing$="Missing in position: "+{
}
while un {
missing$=eval$(un)+"-pos"+eval$(un,un^)+{
}
}
=inner$(a, space$)+{
}+unused$+missing$
Else
=inner$(a, space$)+{
} + unused$
End if
}
flush
While not empty {
Read t
Document result$="Payloads:"+{
}
p=list
for i=0 to 6 {
Append p, "Payload#"+trim$(str$(i))
result$=" "+eval$(p, i)+{
}
}
result$="Template:"+{
}
result$=" "+Tuple$(t, " ")+{
}
result$="Template with Payloads:"+{
}
m=Payload(t, p)
result$=" "+Expand$(!m, " ")
clipboard result$
}
}
Checkit
Report clipboard$
</lang>
{{out}}
<pre style="height:30ex;overflow:scroll">
Payloads:
Payload#2
Payload#5
Payload#6
Template:
(((1, 2),
(3, 4, 1),
5))
Template with Payloads:
[[['Payload#1', 'Payload#2'],
['Payload#3', 'Payload#4', 'Payload#1'],
'Payload#5']]
Unused Payloads
Payload#0
Payload#6
Payloads:
Payload#0
Payload#1
Payload#2
Payload#3
Payload#4
Payload#5
Payload#6
Template:
(((1, 10),
(3, 4, 16),
5))
Template with Payloads:
[[['Payload#1', 'missing#pos2'],
['Payload#3', 'Payload#4', 'missing#pos5'],
'Payload#5']]
Unused Payloads
Payload#0
Payload#6
Payload#2
Missing in position:
Payload#10-pos2
Payload#16-pos5
</pre >
|