Mathematica a une fonction MapThread
qui se comporte comme ceci:Comment implémenter MapThread avec le mappage de liste de base?
MapThread[ f , { {a,b,c} , {d,e,f} } ]
-> { f[a,d] , f[b,e] , f[c,f] }
Je voudrais mettre en œuvre cette TeX, qui possède des installations de programmation très primitives. J'ai des facilités de base pour itérer sur des listes, mais pas d'indexation logique. Compte tenu de cette restriction, existe-t-il un algorithme permettant de boucler de manière synchrone sur plusieurs listes?
je pourrais écrire quelque chose comme ce qui suit: (pseudocode)
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
mais il semble terriblement inefficace. Notez que la grande restriction est que je ne peux pas accéder à des éléments de listes numériquement, donc quelque chose comme ce qui suit est trop « haut niveau »:
for ii = 1:length(list1)
func (list1(ii) , list2(ii))
end
La raison pour laquelle cette restriction est en place est que pour mettre en œuvre list1(ii)
Je dois écrire quelque chose comme ce qui suit en premier lieu:
jj = 0
for elem1 in list1
jj = jj+1
if ii=jj
return elem1
fi
end
Ou est le cas inefficace probablement le meilleur que je serai en mesure de le faire avec une telle langue primitive?
Pouvez-vous faire l'équivalent de First [] et Rest [] sur ces listes, et tester si elles ont une longueur nulle? Dans ce cas, ce n'est pas si difficile. Sinon, votre astuce N^2 est probablement la meilleure solution sans morceler vos propres macros pour manipuler les listes. – Pillsy
D'abord [] et reste [] sont possibles, oui. Ah, je pense que je vois où tu vas avec ça. –