Pregunta

Mathematica tiene una función MapThread que se comporta de esta manera:

MapThread[ f , { {a,b,c} , {d,e,f} } ]
-> { f[a,d] , f[b,e] , f[c,f] }

Me gustaría implementar esto en TeX, que cuenta con instalaciones de programación muy primitivas. He instalaciones básicas para la iteración en las listas, pero sin indexación lógica en ellos. Teniendo en cuenta esta restricción, es que hay un algoritmo para recorrer de forma sincrónica, aunque varias listas?

Podría escribir algo como lo siguiente: (pseudocódigo)

ii = 0; jj = 0;
for elem1 in list1
  ii = ii+1
  for elem2 in list2
    jj = jj+1
    if ii == jj
      return ( elem1 , elem2 )
    fi
  end
end

pero parece terriblemente ineficiente. Tenga en cuenta que la gran restricción es que no puedo acceder a elementos de las listas numérica, así que algo como lo siguiente es demasiado "alto nivel":

for ii = 1:length(list1)
  func ( list1(ii) , list2(ii) )
end

La razón de esta restricción está en su lugar es que con el fin de poner en práctica list1(ii) que había necesidad de escribir algo como lo siguiente en primer lugar:

jj = 0
for elem1 in list1
  jj = jj+1
  if ii=jj
    return elem1
  fi
end

O es el caso ineficaz probablemente el mejor que va a ser capaz de hacer con un lenguaje tan primitivo?

¿Fue útil?

Solución

En pseudocódigo, siempre y cuando se puede comprobar si una lista está vacía, puede hacerlo de esta manera:

while (list1 is not empty) and (list2 is not empty)
  x1 = first(list1);
  x2 = first(list2);
  list1 = rest(list1);
  list2 = rest(list2);

  func(x1, x2);
end while

Es todavía no va a ganar ningún concurso de belleza, pero que va a hacer el trabajo sin ser abrumadoramente ineficiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top