Lea*_*man 4 haskell functional-programming wolfram-mathematica
让我说我有一个功能f[x_, y_],两个列表l1,l2.我想用in 和in 来评估f[x,y]每一对,我想做而不必制作所有形式的对.x,yxl1yl2{l1[[i]],l2[[j]]}
基本上,我想要的是Map [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]
Run Code Online (Sandbox Code Playgroud)
如果我能找到原始问题,我想我可以完成剩下的工作,但我希望代码能像Haskell一样.任何在Mathematica中实现类似Haskell的代码的建议都将受到赞赏.)
为了评估功能f从两个列表在所有对l1和l2使用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]}}
Run Code Online (Sandbox Code Playgroud)
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}]}}
Run Code Online (Sandbox Code Playgroud)
请注意,这会生成嵌套列表; Flatten如果你愿意,你可以.
我原来的答复指出,Thread和MapThread,这是一个功能应用到相应的列表,如对两种方式MapThread[f,{a,b},{1,2}] == {f[a,1], f[b,2]}.
PS我认为,当你学习这些东西时,你会发现文档非常有用.有很多一般主题页面,例如,将函数应用于列表和列表操作.这些通常与特定文档底部的"更多关于"部分相关联.这使得当你不知道它们将被称为什么时,更容易找到它们.