gpt4 book ai didi

haskell - 如何使用函数式编程技术让 Mathematica 将 2 变量函数线程化到两个列表上?

转载 作者:行者123 更新时间:2023-12-02 15:46:37 25 4
gpt4 key购买 nike

假设我有一个函数 f[x_, y_] 和两个列表 l1l2。我想评估 l1 中每对 x,yxf[x,y]l2 中的 y,并且我想这样做而不必制作 {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]

如果我能弄清楚最初的问题,我想我可以完成剩下的工作,但我希望代码类似于 Haskell。任何有关在 Mathematica 中实现类似 Haskell 的代码的建议将不胜感激。)

最佳答案

要对两个列表 l1l2 中的所有对求值函数 f,请使用 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}]}}

请注意,这会生成一个嵌套列表;如果您愿意,可以压平它。

我原来的答案指向ThreadMapThread ,这是将函数应用于列表中相应对的两种方法,例如MapThread[f,{a,b},{1,2}] == {f[a,1], f[b,2]}

附注我认为当您学习这些内容时,您会发现文档非常有帮助。一般主题页面有很多,例如applying functions to listslist manipulation 。这些通常链接到特定文档底部的“更多信息”部分。当您不知道它们的名称时,这可以让您更轻松地查找它们。

关于haskell - 如何使用函数式编程技术让 Mathematica 将 2 变量函数线程化到两个列表上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com