Mathematica には、次のMapThread
ように動作する関数があります。
MapThread[ f , { {a,b,c} , {d,e,f} } ]
-> { f[a,d] , f[b,e] , f[c,f] }
非常に原始的なプログラミング機能を持つ TeX でこれを実装したいと思います。リストを反復するための基本的な機能はありますが、それらへの論理インデックスはありません。この制限がある場合、複数のリストを同期的にループするアルゴリズムはありますか?
次のようなものを書くことができます: (疑似コード)
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
しかし、それはひどく非効率的なようです。大きな制限は、リストの要素に数値でアクセスできないことであることに注意してください。したがって、次のようなものは「高レベル」すぎます。
for ii = 1:length(list1)
func ( list1(ii) , list2(ii) )
end
この制限が設けられている理由は、実装するlist1(ii)
には、最初に次のようなものを書く必要があるからです。
jj = 0
for elem1 in list1
jj = jj+1
if ii=jj
return elem1
fi
end
それとも、そのような原始的な言語で私ができる最善のことは、おそらく非効率的なケースでしょうか?