首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 3

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

Stack Overflow用户

发布于 2010-04-02 06:45:13

获取OP关于在Mathematica中实现类似Haskell代码的建议的请求。你需要处理的几件事情是:

  • Haskell懒洋洋地进行评估,在默认情况下Mathematica不这样做,它非常急切。您需要与Hold[]及其亲属搏斗才能懒洋洋地编写评估函数,但这是可以做到的。你也可以颠覆Mathematica的评估过程,修改Prolog和Epilog之类的东西。
  • Haskell的类型系统和类型检查可能比Mathematica的默认值更严格,但是Mathematica确实具有实现严格类型检查的功能。

我肯定还有很多,但我对Haskell不太熟悉。

票数 3
EN

Stack Overflow用户

发布于 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}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2564241

复制
相关文章

相似问题

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