gpt4 book ai didi

过滤元组集合

转载 作者:行者123 更新时间:2023-12-01 12:28:20 25 4
gpt4 key购买 nike

我在 Julia 中玩迭代和理解,并尝试编写简单的问题:找到所有小于 10 且乘积小于 10 的数字对。这是我的第一次尝试:

solution = filter((a,b)->a*b<10, product(1:10, 1:10))
collect(solution)

但我收到错误“参数数量错误”。这是意料之中的,因为 filter 中的匿名函数需要两个参数,但它得到一个元组。我知道我能做到

solution = filter(p->p[1]*p[2]<10, product(1:10, 1:10))

但它看起来不像上面那个好看。有没有一种方法可以告诉我 (a,b) 是元组类型的参数并使用与第一个示例中的语法类似的东西?

最佳答案

我不认为有一种方法可以完全按照您的意愿进行操作,但是对于匿名函数,您可以考虑以下一些替代方法:

x->let (a,b)=x; a*b<10 end
x->((a,b)=x; a*b<10)

如果你愿意,这些当然可以做成宏:

macro tup(ex)
@assert ex.head == :(->)
@assert ex.args[1].head == :tuple
arg = gensym()
quote
$arg -> ( $(ex.args[1]) = $arg; $(ex.args[2]) )
end
end

然后 @tup (a, b) -> a * b < 10会为所欲为。

Metaprogramming在 Julia 中非常有用,并且在您一遍又一遍地做某事并且想要专门的语法的情况下很常见。但如果这是一次性的事情,我会避免这种元编程,因为添加新语法意味着学习新语法并使代码更难阅读。

关于过滤元组集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240434/

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