Gestione degli stem in REXX 
Wednesday, 15 August 2012, 15:40 - Informatica, Programmazione, Programmazione strutturata, Linguaggi, REXX
Rimuovere e restituire N elementi da una determinata posizione

aRemove: /* (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 stem

aCopy: /* (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 posizione

aInsert: /* (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 fine

aPush: /* (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 fine

aPop: /* (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 stem

repKeys: /* (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 valore

countWhen: /* (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



Commenti

Aggiungi commento
Compilare i campi sottostanti per inserire un commento.









Inserisci formattazione testo: