Gestione degli stem in REXX
Rimuovere e restituire N elementi da una determinata posizioneaRemove: /* (src, index, cnt, dst) */
$sc = value(arg(1)".0")
$cnt = arg(3)
$si = arg(2)
if $si + $cnt - 1 > $sc then $cnt = $sc - $si + 1
do $di = 1 to $cnt
interpret arg(4)".$di="arg(1)".$si"
$si = $si + 1
end
$di = arg(2)
do $si = arg(2) + $cnt to $sc
interpret arg(1)".$di="arg(1)".$si"
$di = $di + 1
end
do $i = $sc - $cnt + 1 to $sc
interpret "drop "arg(1)".$i"
end
$sc = $sc - $cnt
interpret arg(1)".0=$sc"
interpret arg(4)".0=$cnt"
return $sc
Duplicare uno stemaCopy: /* (src, dst) */
$n = value(arg(1)".0")
do $i = 1 to $n
interpret arg(2)".$i="arg(1)".$i"
end
interpret arg(2)".0=$n"
return $n
Inserire uno stem in una determinata posizioneaInsert: /* (dst, index, src) */
$dc = value(arg(1)".0")
$sc = value(arg(3)".0")
$nc = $dc + $sc
$si = $dc
do $di = $nc to arg(2) + 1 by -1
interpret arg(1)".$di="arg(1)".$si"
$si = $si - 1
end
$di = arg(2)
do $si = 1 to $sc
interpret arg(1)".$di="arg(3)".$si"
$di = $di + 1
end
interpret arg(1)".0=$nc"
return $n
Inserire un elemento alla fineaPush: /* (stem, value) */
$n = value(arg(1)".0") + 1
interpret arg(1)".$n=arg(2)"
interpret arg(1)".0=$n"
return $n
Rimuovere e restituire un elemento dalla fineaPop: /* (stem) */
$n = value(arg(1)".0")
$r = value(arg(1)".$n")
interpret "drop "arg(1)".$n"
$n = $n - 1
interpret arg(1)".0=$n"
return $r
Sostituire gli indici di uno stem con i valori di un altro stemrepKeys: /* (stem, keys) */
$a = arg(1)
$ks = arg(2)
$n = value($a".0")
do $i2 = 1 to $n
$k = value($ks".$i2")
$v = value($a".$i2")
if symbol($a".$i2") = "VAR" then interpret $a".$k=$v"
else interpret $a".$k=''"
interpret "drop "$a".$i2"
end
return $n
Contare gli elementi di uno stem i cui sottoelementi hanno un determinato valorecountWhen: /* (stem, property, value) */
$c = 0
$n = value(arg(1)".0")
do $ii = 1 to $n
if value(arg(1)".$ii."arg(2)) = arg(3) then $c = $c + 1
end
return $c