首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用函数式编程技术,让Mathematica在两个列表上执行一个2变量函数?

如何使用函数式编程技术,让Mathematica在两个列表上执行一个2变量函数?
EN

Stack Overflow用户
提问于 2010-04-01 23:21:09
回答 3查看 2.7K关注 0票数 4

假设我有一个函数f[x_, y_]和两个lists l1l2。我想对每对f[x,y]进行x,y评估,其中xl1中,yl2中,我想这样做,而不必做所有的表单{l1[[i]],l2[[j]]}

本质上,我想要的是地图[Map[f#1,#2&,l1],l2],其中#1从l1获取值,#2从l2获取值,但这是行不通的。

(动机:我正试图用Mathematica实现一些基本的Haskell程序。特别是,我希望能够编写Haskell程序。

代码语言:javascript
运行
复制
isMatroid::[[Int]]->Bool
isMatroid b =and[or[sort(union(xs\\[x])[y]'elem'b|y<-ys]|xs<-b,ys<-b, xs<-x]

我想我可以做剩下的,如果我能找出原来的问题,但我希望代码是像哈斯克尔一样。如有任何关于在Mathematica中实现类似Haskell的代码的建议,将不胜感激。)

EN

Stack Overflow用户

回答已采纳

发布于 2010-04-01 23:36:49

若要对来自两个列表fl2的所有对计算函数l1,请使用Outer

代码语言:javascript
运行
复制
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在提供的列表的最低级别工作;您还可以指定带有附加参数的级别:

代码语言:javascript
运行
复制
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

我最初的回答是ThreadMapThread,这两种方法可以将函数应用于列表中的对应对,例如MapThread[f,{a,b},{1,2}] == {f[a,1], f[b,2]}

我认为当你学习这些东西的时候,你会发现这些文档非常有用。有很多通用主题页面,例如将函数应用于列表列表操作。这些信息通常链接在特定文档底部的"more about“一节中。这使得当你不知道会被称为什么的东西时,更容易找到它们。

票数 9
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2564241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档