假设我有一个函数f[x_, y_]和两个lists l1,l2。我想对每对f[x,y]进行x,y评估,其中x在l1中,y在l2中,我想这样做,而不必做所有的表单{l1[[i]],l2[[j]]}。
本质上,我想要的是地图[Map[f#1,#2&,l1],l2],其中#1从l1获取值,#2从l2获取值,但这是行不通的。
(动机:我正试图用Mathematica实现一些基本的Haskell程序。特别是,我希望能够编写Haskell程序。
isMatroid::[[Int]]->Bool
isMatroid b =and[or[sort(union(xs\\[x])[y]'elem'b|y<-ys]|xs<-b,ys<-b, xs<-x]我想我可以做剩下的,如果我能找出原来的问题,但我希望代码是像哈斯克尔一样。如有任何关于在Mathematica中实现类似Haskell的代码的建议,将不胜感激。)
发布于 2010-04-01 23:36:49
若要对来自两个列表f和l2的所有对计算函数l1,请使用Outer
In[1]:=  Outer[f, {a,b}, {x,y,z}]
Out[1]:= {{f[a,x],f[a,y],f[a,z]}, {f[b,x],f[b,y],f[b,z]}}默认情况下,Outer在提供的列表的最低级别工作;您还可以指定带有附加参数的级别:
In[2]:=  Outer[f, {{1, 2}, {3, 4}}, {{a, b}, {c, d}}, 1]
Out[2]:= {{f[{1,2},{a,b}], f[{1,2},{c,d}]}, {f[{3,4},{a,b}], f[{3,4},{c,d}]}}请注意,这会产生一个嵌套列表;如果您愿意,可以使用Flatten。
我最初的回答是Thread和MapThread,这两种方法可以将函数应用于列表中的对应对,例如MapThread[f,{a,b},{1,2}] == {f[a,1], f[b,2]}。
我认为当你学习这些东西的时候,你会发现这些文档非常有用。有很多通用主题页面,例如将函数应用于列表和列表操作。这些信息通常链接在特定文档底部的"more about“一节中。这使得当你不知道会被称为什么的东西时,更容易找到它们。
发布于 2010-04-02 06:45:13
获取OP关于在Mathematica中实现类似Haskell代码的建议的请求。你需要处理的几件事情是:
我肯定还有很多,但我对Haskell不太熟悉。
发布于 2010-04-02 00:36:29
In1:= list1 = Range1,5;
In2:= list2 = Range6,10;
In3:= (f @@ #) & /@转置{list1,list2}
Out3= {f1,6,f2,7,f3,8,f4,9,f5,10}
https://stackoverflow.com/questions/2564241
复制相似问题