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
或者效率低下的情况可能是我能用这种原始语言做的最好的情况吗?
答案 0 :(得分:2)
在伪代码中,只要您可以测试列表是否为空,就可以这样做:
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
它仍然不会赢得任何选美比赛,但它会完成工作而不会非常低效。