Algorithm 如何使用基本列表映射实现MapThread?
Mathematica有一个函数,其行为如下:Algorithm 如何使用基本列表映射实现MapThread?,algorithm,list,wolfram-mathematica,tex,Algorithm,List,Wolfram Mathematica,Tex,Mathematica有一个函数,其行为如下: MapThread[ f , { {a,b,c} , {d,e,f} } ] -> { f[a,d] , f[b,e] , f[c,f] } 我想在TeX中实现它,它有非常原始的编程工具。我有迭代列表的基本工具,但没有对列表进行逻辑索引。有了这个限制,是否有一个同步循环多个列表的算法 我可以编写如下内容:(伪代码) 但它似乎效率极低。请注意,最大的限制是我无法以数字形式访问列表的元素,因此下面的内容太“高级”: 设置此限制的原因是为了实现l
MapThread[ f , { {a,b,c} , {d,e,f} } ]
-> { f[a,d] , f[b,e] , f[c,f] }
我想在TeX中实现它,它有非常原始的编程工具。我有迭代列表的基本工具,但没有对列表进行逻辑索引。有了这个限制,是否有一个同步循环多个列表的算法
我可以编写如下内容:(伪代码)
但它似乎效率极低。请注意,最大的限制是我无法以数字形式访问列表的元素,因此下面的内容太“高级”:
设置此限制的原因是为了实现list1(ii)
,我首先需要编写如下内容:
jj = 0
for elem1 in list1
jj = jj+1
if ii=jj
return elem1
fi
end
或者,这种低效的情况可能是我使用这种原始语言所能做到的最好的情况吗?在伪代码中,只要可以测试列表是否为空,就可以这样做:
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
它仍然无法赢得任何选美比赛,但它会在不太低效的情况下完成这项工作。你能在这些列表上做第一个[]和第二个[],并测试它们的长度是否为零吗?那样的话就没那么难了;否则,您的N^2技巧可能是最好的解决方案,而无需将自己的宏组合在一起来操作列表。可以使用First[]和Rest[]。啊,我想我明白你的意思了。
jj = 0
for elem1 in list1
jj = jj+1
if ii=jj
return elem1
fi
end
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